開發環境:Centos 6.2 ;apace 2.2; php 5.5.5 ;
第一步:擴展文件生成
運行PHP源碼中ext中的ext_skel腳本(主要參數爲 --extname ),會在ext中生成extname的文件夾,即擴展項目(本次測試使用sayhello作爲模塊名)
第二步:擴展項目文件
查看sayhello文件下,有一下幾個重要文件:config.m4 php_sayhello.h sayhello.php sayhello.c 。
(1)sayhello.c :
基本函數:
PHP_INI_BEGIN(): 加載擴展在php.ini中的配置信息;
PHP_MINIT_FUNCTION(sayhello):php初始化時,都會執行每個模塊的初始化函數;
PHP_MSHUTDOWN_FUNCTION(sayhello);apache stop的時候,卸載php模塊,這個時候執行此函數;
PHP_RINIT_FUNCTION(sayhello):每次request執行的函數;
PHP_RSHUTDOWN_FUNCTION(sayhello);request
結束或者被die(exit)掉了,執行這個函數,收拾爛攤子(釋放內存等等);
自定義函數:
PHP_FUNCTION(sayhello):你的擴展定義的函數,必須使用zend給定的這個宏來定義,每一個定義的函數都必須加入到 sayhello_functions[]
這個結構體中。
(2)config.m4 保存擴展編譯配置信息的文件
第三步: 修改config.m4,讓你的sayhello可以被編譯
PHP_ARG_ENABLE(sayhello, whether to enable sayhello support,
dnl Make sure that the comment is aligned:
[ --enable-sayhello Enable sayhello support])
第四步:正常的編譯步驟./config make make install 生成sayhello.so
第五步:配置php.in,重啓服務器,就可以在php代碼中使用自己sayhello擴展的sayhello函數了
windows使用擴展最好在windows下重新編譯源碼生成dll.