일부 필요한 시나리오에서는 특정 요구 사항을 충족하기 위해 자체 로컬 PHP 함수를 개발해야 하며 새 함수는 PHP 모듈에 있어야 합니다. 다음은 가장 간단한 PHP 모듈 개발을 소개합니다. hello world를 출력하는 자신만의 say_hello($arg) 함수를 빌드하세요: $arg.
본 문서에서 소개하는 PHP 모듈 개발은 hello world를 만드는 정도에 불과합니다. 왜 이렇게 하는지는 당분간 자세히 소개하지 않겠습니다.
hello 세계 수준 모듈은 몇 가지 간단한 단계로 완료할 수 있습니다.
모듈 인프라 생성
모듈 코드 수정 및 say_hello 함수 추가
컴파일 수정 구성 파일
모듈 공유 라이브러리 생성
모듈을 효과적으로 만들기 위한 구성 모듈
모듈 테스트
PHP 소스 코드 디렉터리 아래에 ext 디렉터리를 입력합니다.
Execute ./ext_skel ––extname=sayhello(여기서 “–” 인코딩에 문제가 있습니다. 직접 복사하지 마세요.)
출력:
[root@myhost ext]# ./ext_skel ––extname=sayhello
sayhello 디렉토리 만들기
기본 파일 만들기: config.m4 config.w32 .cvsignore sayhello.c php_sayhello.h 크레딧 실험 테스트/001.phpt sayhello.php [완료].
새 확장 프로그램을 사용하려면 다음을 수행해야 합니다. 다음 단계를 실행합니다:
1.$ vi ext/sayhello/config.m4
3.$ ./buildconf
4. -sayhello
5 . $ make
6. $ ./php -f ext/sayhello/sayhello.php
7. $ vi ext/sayhello/sayhello.c
8단계를 반복하세요. 6 ext/sayhello/config.m4에 만족할 때까지
6단계에서는
모듈이 PHP로 컴파일되었는지 확인합니다. 그런 다음
코드 작성을 시작하고 필요한 만큼 자주 마지막 두 단계를 반복합니다.참조 show 출력 표시 모듈 인프라가 생성되었습니다. 생성된 모듈에 의해 생성된 파일을 살펴보겠습니다.
-RW-R –R-1 ROOT ROOT 2103 APR 9 05:05 config.m4 // 구성 파일 컴파일
-RW-R –R – 1 루트 루트 310 Apr 9 05:05 config.w32 //w32 컴파일 구성 파일
-rw-r–r– 1 루트 루트 8 Apr 9 05:05 CREDITS //저자 정보
-rw-r–r – 1 루트 루트 0 Apr 9 05:05 실험 //베타 버전 정보 식별
-rw-r–r– 1 루트 루트 2755 Apr 9 05:05 php_sayhello.h //모듈 정의 헤더 파일
-rw-r –r– 1 루트 루트 5294 Apr 9 05:05 sayhello.c //모듈 구현 파일
-rw-r–r– 1 루트 루트 508 Apr 9 05:05 sayhello.php // 모듈 로딩 파일을 테스트하는 데 사용되는 PHP
drwxr-xr-x 2 root root 4096 Apr 9 05:05 테스트 ’ s s s s s s t t t t t ile t t t t e t t e t t e l e t t t e t e t t t t t e t t u s t 이 티 t t y
2. say_hello() 함수 구현
모듈의 php_sayhello.h 파일을 열고 php say_hello()용으로 준비된 c 함수 정의를 추가하세요.
PHP_FUNCTION(say_hello); //php 소스 코드는 다음과 같은 매크로를 정의합니다. 모듈 열기에 익숙해지면 매우 편리합니다. 추가한 후 say_hello.c에 PHP_FUNCTION(say_hello)의 특정 구현을 추가하겠습니다.PHP_FUNCTION(say_hello){ char *arg = NULL; int arg_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) ==FAILURE) { //获取php代码的输入参数,方式与scanf差不多 return; } zend_printf("hello world : %s",arg); RETURN_STRINGL(arg, arg_len, 1); }이제 구현 코드가 작성되었으므로 필요합니다. 이 함수를 PHP 로컬 함수에 등록하려면 sayhello.c에서 sayhello_functions를 수정해야 합니다.
zend_function_entry sayhello_functions[] = { PHP_FE(confirm_sayhello_compiled, NULL) /* For testing, remove later. */ PHP_FE(say_hello, NULL) //好,现在say_hello函数也注册了 {NULL, NULL, NULL} /* Must be the last line in sayhello_functions[] */ };
config.m4를 열고 앞에 있는
comment
dnl [ --enable-sayhello Sayhello 지원 활성화])
dnl PHP_SUBST(SAYHELLO_SHARED_LIBADD ) 4. 모듈 컴파일 및 공유 라이브러리 생성여기에서 사용합니다. 게다가 동적 라이브러리 모듈 생성 방법은 PHP로 정적 컴파일하는 것보다 훨씬 빠르며디버깅
에 편리합니다(동적 라이브러리는 다음을 사용하여 로드되지 않습니다). 나중에 볼 수 있듯이 PHP의 dl() 함수. sayhello 모듈 폴더에 들어가서(cd), bin 경로에서 php[root@myhost sayhello]# /opt/php_server/php/bin/phpize
구성:Zend 모듈 API 번호: 20060613Zend 확장 API 번호: 220060519此时为模块编译的configure文件已经生成。继续生成Makefile文件:
[root@myhost sayhello]# ./configure –with-php-config=/opt/php_server/php/bin/php-config
……没问题的话是没有错误的
现在可以编译了:
make
代码没有问题的话不会有错的。
编译完,进行模块安装:
[root@myhost sayhello]# make install
Installing shared extensions: /opt/php_server/php/lib/php/extensions/no-debug-non-zts-20060613/
显示模块已经安装至/php安装路径/extensions/no-debug-non-zts-20060613/ 路径下了。
打开你的php.ini文件开始修改吧:
扩展路径设置:
修改extension_dir = “/php安装路径/lib/php/extensions/no-debug-non-zts-20060613″ //看看上述的模块安装路径就知道了
增加模块设置:
[sayhello]
extension=sayhello.so
ok 大功告成,重新启动你的php模块把。
写以下php测试代码执行:
<?php $a = say_hello("frank"); echo "<br>"; echo $a; ?>;
打开这个网页后显示:
hello world : frank
frank
成功运行,模块测试通过。
위 내용은 PHP 모듈 개발이란 무엇입니까? 간단한 PHP 모듈 개발 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!