構建PHP擴展 包括一下4個步驟php
生成框架-》實現函數-》構建-》執行函數框架
構建一個擴展,須要的全部東西只有兩樣:PHP源碼和PHP的可執行程序。所以,咱們須要先準備好PHP源碼和PHP運行環境。
生成框架函數
框架,即PHP擴展的框架,也稱骨架。PHP提供了生成框架的工具,十分易用。
生成框架的步驟以下:
cd php源碼根目錄
cd extphp-fpm
php ext_skel.php --ext 'goodbyeearth'
ext_skel是PHP提供的生成框架的工具,--ext 的值是擴展的名稱。該命令的結果是在ext目錄下建立了一個goodbyeearth目錄,擴展框架的全部文件,都在這個目錄下面。工具
實現函數spa
咱們實現函數bye(),該函數沒有參數和返回值,只打印一行字符串Goodbye Earth。字符串
實現函數須要在2個文件中添加代碼,文件在goodbyeearth目錄下。
在php_goodbyeearth.h中的PHP_FUNCTION(confirm_goodbyeearth_compiled);下一行添加:
PHP_FUNCTION(bye);
在goodbyeearth.c中添加2段代碼:
zend_function_entry goodbyeearth_functions[] = {
PHP_FE(confirm_goodbyeearth_compiled, NULL)
{NULL, NULL, NULL}
};
在以上代碼段中添加:
zend_function_entry goodbyeearth_functions[] = {
PHP_FE(confirm_goodbyeearth_compiled, NULL) PHP_FE(bye, NULL)
{NULL, NULL, NULL}
};
在文件末尾編寫函數的實現:
PHP_FUNCTION(bye)
{
php_printf("Goodbye Earth!\n");
}
構建源碼
構建是編譯擴展的過程,包括如下步驟:
cd goodbyeearth
修改構建配置文件config.m4
it
將SEARCH_PATH的第3個路徑改成擴展所在的路徑,SEARCH_FOR的值是php_goodbyeearth.h
php環境目錄/bin/phpize
./configure --with-php-config= php環境目錄/bin/php-config --enable-goodbyeearth
make
make install
make會編譯出goodbyeearth.so到goodbyeearth/modules下,make install會將goodbyeearth.so拷貝到php環境的擴展路徑下,好比php環境目錄/ext下。io
執行函數
在php.ini中添加extension=goodbyeearth.so,重啓php-fpm.
編寫php腳本,好比test.php,內容以下: <?php echo bye(); 運行php test.php,將輸出: Goodbye Earth! 則擴展裏的函數bye()成功執行。