>백엔드 개발 >PHP 튜토리얼 >PHP 모듈 개발이란 무엇입니까? 간단한 PHP 모듈 개발 소개

PHP 모듈 개발이란 무엇입니까? 간단한 PHP 모듈 개발 소개

伊谢尔伦
伊谢尔伦원래의
2017-06-22 13:30:214693검색

일부 필요한 시나리오에서는 특정 요구 사항을 충족하기 위해 자체 로컬 PHP 함수를 개발해야 하며 새 함수는 PHP 모듈에 있어야 합니다. 다음은 가장 간단한 PHP 모듈 개발을 소개합니다. hello world를 출력하는 자신만의 say_hello($arg) 함수를 빌드하세요: $arg.

본 문서에서 소개하는 PHP 모듈 개발은 hello world를 만드는 정도에 불과합니다. 왜 이렇게 하는지는 당분간 자세히 소개하지 않겠습니다.

hello 세계 수준 모듈은 몇 가지 간단한 단계로 완료할 수 있습니다.

모듈 인프라 생성

모듈 코드 수정 및 say_hello 함수 추가

컴파일 수정 구성 파일

모듈 공유 라이브러리 생성

모듈을 효과적으로 만들기 위한 구성 모듈

모듈 테스트

1. 모듈 베이스 생성

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[] */
};

3. 컴파일 구성 파일을 수정하고


config.m4를 열고 앞에 있는
comment

문자 "dnl"을 제거하세요. 다음 내용 중:

dnl PHP_ARG_ENABLE(sayhello, sayhello 지원 활성화 여부,

dnl 주석이 정렬되었는지 확인하세요.

dnl [ --enable-sayhello     Sayhello 지원 활성화])

dnl PHP_SUBST(SAYHELLO_SHARED_LIBADD )

4. 모듈 컴파일 및 공유 라이브러리 생성

여기에서 사용합니다. 게다가 동적 라이브러리 모듈 생성 방법은 PHP로 정적 컴파일하는 것보다 훨씬 빠르며

디버깅

에 편리합니다(동적 라이브러리는 다음을 사용하여 로드되지 않습니다). 나중에 볼 수 있듯이 PHP의 dl() 함수.

sayhello 모듈 폴더에 들어가서(cd), bin 경로에서 php

install

phpize를 실행하세요:

[root@myhost sayhello]# /opt/php_server/php/bin/phpize

구성:

PHP Api 버전: 20041225

Zend 모듈 API 번호:     20060613

Zend 확장 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/ 路径下了。

5、配置模块,使其被加载

打开你的php.ini文件开始修改吧:

扩展路径设置:

修改extension_dir = “/php安装路径/lib/php/extensions/no-debug-non-zts-20060613″ //看看上述的模块安装路径就知道了

增加模块设置:

[sayhello]
extension=sayhello.so

ok 大功告成,重新启动你的php模块把。

6、测试模块

写以下php测试代码执行:

<?php
$a = say_hello("frank");
echo "<br>";
echo $a;
?>;

打开这个网页后显示:

hello world : frank
frank

成功运行,模块测试通过。

위 내용은 PHP 모듈 개발이란 무엇입니까? 간단한 PHP 모듈 개발 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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