>백엔드 개발 >PHP 튜토리얼 >PHP 확장을 작성하는 방법

PHP 확장을 작성하는 방법

(*-*)浩
(*-*)浩원래의
2019-05-13 14:34:184589검색

C 확장을 사용하는 이유

C는 정적으로 컴파일되므로 실행 효율성이 PHP 코드보다 훨씬 높습니다. C를 사용하여 개발된 동일한 연산 코드의 성능은 PHP의 성능보다 수백 배 더 높습니다. CURL과 같은 IO 작업의 경우 시간 소모가 주로 IOWait에 있기 때문에 C 확장에는 뚜렷한 이점이 없습니다.

또한 프로세스가 시작될 때 C 확장이 로드됩니다. PHP 코드는 요청 수명 주기의 데이터만 작동할 수 있으며 C 확장은 더 넓은 범위에서 작동할 수 있습니다.

추천 강좌: PHP 튜토리얼.

PHP 확장을 작성하는 방법

1단계

php-5.4와 같은 PHP 소스 코드를 다운로드하세요. .16. 압축을 푼 후 php-5.4.16ext 디렉터리로 들어갑니다. ./ext_skel –extname=myext를 입력합니다. myext는 확장명 이름이며 실행 후 myext 디렉터리가 생성됩니다.

ext_skel은 PHP 확장 뼈대 코드를 생성하기 위해 PHP에서 공식적으로 제공하는 도구입니다.

cd myext. php_myext.h, myext.c, config.m4 등과 같은 여러 파일을 볼 수 있습니다. config.m4는 다양한 컴파일 옵션을 수정하는 데 사용되는 AutoConf 도구의 구성 파일입니다.

두 번째 단계

config.m4를 수정하고

dnl PHP_ARG_WITH(myext, for myext support,
dnl Make sure that the comment is aligned:
dnl [  --with-myext             Include myext support])

PHP_ARG_WITH(myext, for myext support,
[  --with-myext             Include myext support])
# 🎜로 변경합니다. 🎜#아래에는 –enable-myext도 있는데, 이는 PHP 커널로 컴파일된다는 의미입니다. with는 동적 링크 라이브러리로 로드됩니다.

세 번째 단계

php_myext.h를 수정하고 PHP_FUNCTION(confirm_myext_compiled)을 참조하세요. PHP_FUNCTION(myext_helloworld) 라인은 myext_helloworld의 확장 함수를 선언하는 것을 의미합니다.

그다음 확장기능 구현 부분인 myext.c를 수정합니다.

const zend_function_entry myext_functions[] = {
        PHP_FE(confirm_myext_compiled,  NULL)           /* For testing, remove later. */
        PHP_FE(myext_helloworld,  NULL)
        PHP_FE_END      /* Must be the last line in myext_functions[] */
};
여기 코드는 함수 포인터를 Zend 엔진에 등록하고 PHP_FE(myext_helloworld, NULL) 줄을 추가하는 것입니다(뒤에 세미콜론을 포함하지 마세요).

4단계

myext.c 끝에 myext_helloworld의 실행 코드를 추가합니다.

PHP_FUNCTION(myext_helloworld)
{
        char *arg = NULL;
	int arg_len, len;
	char *strg;
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
		return;
	}
	php_printf("Hello World!\n");
	RETRUN_TRUE;
}
zend_parse_parameters는 PHP가 전달한 매개변수를 받아들이는 데 사용되며 RETURN_XXX 매크로는 데이터를 PHP로 반환하는 데 사용됩니다.

5단계

myext 디렉터리에 phpize, ./configure, make, make를 차례로 실행합니다. 그런 다음 php.ini를 수정하여 Extension=myext.so

Execute php -r "myext_helloworld('test');"를 추가하고 hello world!

를 출력합니다.

위 내용은 PHP 확장을 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.