source

PHP 확장자를 만드는 방법

nicesource 2023. 8. 7. 22:36
반응형

PHP 확장자를 만드는 방법

PHP를 사용하는 수 것을 .require_once.

하지만 C나 C++로 확장자를 작성하면 성능이 최적화됩니까?

만약 그렇다면, 당신은 그것을 위해 어떻게 "헬로 월드"를 만들겠습니까?

PHP를 사용하는 수 것을 .require_once.

은 이기의다같습다니음입니다.include지정된 파일을 포함하고 평가하는 문입니다.확장명은 다른 PHP 스크립트 파일을 포함하고 있기 때문에 올바른 용어가 아닙니다.PHP 확장은 컴파일된 모듈의 형태로 언어에 추가 기능을 제공합니다.

그러나 C 또는 C++로 확장을 작성하면 성능이 최적화됩니까?

예, 성능을 최적화합니다.그것이 CPhalcon 또는 YAF와 같은 PHP 확장자가 작성된 이유입니다.

"Hello World" PHP 확장을 만드는 방법?

"Hello World" PHP 확장을 5단계로 구성하는 방법을 설명하겠습니다.

apt-get으로 일부 도구와 종속성을 가져와야 하기 때문에 데비안 기반 OS가 필요합니다.

1단계 - 빌드 환경/요구사항 설정

PHP 확장은 C 코드로 컴파일됩니다.셸(이미 설치되어 있어야 함), 편집기(선택 사항), 컴파일러(GCC 사용), PHP 자체 및 빌드에 대한 PHP 개발 종속성이 필요합니다.

sudo apt-get install build-essential php7.0 php7.0-dev

2단계 - 구성

기본 구성 파일에서 확장명과 확장명을 구성하는 파일을 설명해야 합니다.

파일:config.m4

PHP_ARG_ENABLE(php_helloworld, Whether to enable the HelloWorldPHP extension, [ --enable-helloworld-php Enable HelloWorldPHP])

if test "$PHP_HELLOWORLD" != "no"; then
    PHP_NEW_EXTENSION(php_helloworld, php_helloworld.c, $ext_shared)
fi

는 NEW_EX입니다. C 파일이 .php_helloworld.c.

3단계 - 코드

우리의 내선 번호에 대한 C 코드를 만들어 봅시다.

먼저 헤더 파일을 만듭니다.

php_helloworld.h

// we define Module constants
#define PHP_HELLOWORLD_EXTNAME "php_helloworld"
#define PHP_HELLOWORLD_VERSION "0.0.1"

// then we declare the function to be exported
PHP_FUNCTION(helloworld_php);

두 번째로 소스 파일을 만듭니다.

php_helloworld.c

// include the PHP API itself
#include <php.h>
// then include the header of your extension
#include "php_helloworld.h"

// register our function to the PHP API 
// so that PHP knows, which functions are in this module
zend_function_entry helloworld_php_functions[] = {
    PHP_FE(helloworld_php, NULL)
    {NULL, NULL, NULL}
};

// some pieces of information about our module
zend_module_entry helloworld_php_module_entry = {
    STANDARD_MODULE_HEADER,
    PHP_HELLOWORLD_EXTNAME,
    helloworld_php_functions,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    PHP_HELLOWORLD_VERSION,
    STANDARD_MODULE_PROPERTIES
};

// use a macro to output additional C code, to make ext dynamically loadable
ZEND_GET_MODULE(helloworld_php)

// Finally, we implement our "Hello World" function
// this function will be made available to PHP
// and prints to PHP stdout using printf
PHP_FUNCTION(helloworld_php) {
    php_printf("Hello World! (from our extension)\n");
}

4단계 - 빌드

이제 확장을 구축할 준비가 되었습니다.

먼저 PHP 확장을 위한 빌드 환경을 준비합니다.

phpize

그런 다음 빌드를 구성하고 확장을 활성화합니다.

./configure --enable-php-helloworld

마지막으로, 우리는 그것을 구축할 수 있습니다.

make
sudo make install

5단계 - 테스트

확장자를 , PHP를 .helloworld_php.so의 기능을 합니다.helloworld_php():

php -d extension=php_helloworld.so -r 'helloworld_php();'

완료했습니다 :)


Windows 기반 구축

Windows(YIKES!)를 구축하려면 단계를 약간 조정해야 합니다.

2단계 - 구성

파일:config.w32

ARG_ENABLE("helloworld", "helloworld support", "yes");

if (PHP_HELLOWORLD == "yes") {
    EXTENSION("helloworld", "php_helloworld.c");
}

4단계 - 빌드

사용하다nmakemake.


유용한 리소스 목록:

C/C++로 작성된 소프트웨어는 확실히 PHP의 코드보다 더 빨리 실행됩니다.그리고 C/C++로 확장자를 작성하여 PHP로 연결할 수 있습니다.PHP 설명서는 여기서 다룹니다. http://php.net/manual/en/internals2.php

다른 답변은 PHP 확장을 작성하기 위한 다른 튜토리얼에 대한 링크를 제공하며, "PHP 확장 튜토리얼"을 구글에서 검색하여 자세한 내용을 찾을 수 있습니다.

하지만 이것이 당신의 앱에서 옳은 일인지는 별개의 이야기입니다.대부분의 전문가들은 PHP가 98%의 애플리케이션에 충분히 빠르게 실행된다는 것에 동의합니다.PHP가 충분히 빠르지 않은 경우는 일반적으로 언어 때문이 아니라 프로그래머가 만든 비효율적인 애플리케이션 아키텍처입니다.이는 C/C++로 앱의 일부를 다시 작성하여 해결할 수 없는 약점입니다.

여기 PHP 확장에 대한 튜토리얼이 있습니다.성능을 최적화할지 여부는 내선 번호에 무엇을 감느냐에 따라 결정됩니다.하지만 저는 단지 최적화를 위해 PHP 확장자를 작성하지는 않을 것입니다.선택의 여지가 없다면 저는 그것을 쓸 것입니다.I.E. PHP에서 직접 사용할 수 있도록 공통 C 라이브러리를 래핑하는 중...

는 (그러나 확실하지는 않지만) 당신이 그것을 만들 수 있다고 생각합니다.dll에 저장하고 파일 존재하는 합니다.php 파일내 이전 을 할 수 . 만약 내 이전 단어가 맞다면 당신은 그렇게 할 수 있습니다.(dll) file에서.

언급URL : https://stackoverflow.com/questions/3632160/how-to-make-a-php-extension

반응형