本文中需要用到上一篇文章中生成的調用WebService客戶端程序具體內容請參見[url]http://commandos.blog.51cto.com/154976/130652[/url]),只不過需要編譯成動態或靜態鏈接庫的形式。本文中,將WebService客戶端程序中的main()改名為testPhpModule(),並將打印到控制台的字符串返回,編譯完成後生成文件名為libTest.so。一、環境准備
將生成的libTest.so文件拷貝到/usr/lib目錄下,並執行命令/sbin/ldconfig 准備PHP的源代碼文件,解壓縮。二、開發PHP Module
首先進入PHP源代碼目錄中的ext目錄,執行如下命令: # ./ext_skel --extname=自定義模塊名 執行完成後,會生成以“自定義模塊名”命名的文件夾,進入這個文件夾後編輯config.m4文件 找到如下代碼: dnl PHP_ARG_WITH(Test, for Test support,三、編寫調用函數
dnl Make sure that the comment is aligned:
dnl [ --with-Test Include Test support]) 或者 dnl PHP_ARG_ENABLE(Test, whether to enable Test support,
dnl Make sure that the comment is aligned:
dnl [ --enable-Test Enable Test support]) 去掉每行前面的dnl 如果是想通過動態引用,建議使用--enable-Test
編輯Test.c文件,找到如下代碼: zend_function_entry Test_functions[] = {四、測試Module
PHP_FE(confirm_Test_compiled, NULL) /* For testing, remove later. */
PHP_FE(test, NULL) /* 增加這一行,其中test代表在PHP文件中的函數調用名 */
{NULL, NULL, NULL} /* Must be the last line in Test_functions[] */
}; 在Test.c文件的最後,增加代碼: PHP_FUNCTION(test)
{
RETURN_STRING(testPhpModule());
} 進行編譯: $ ./configure –with-php-config=${PHP_HOME}/bin/php-config
$ make LDFLAGS=-lTest
$ make test
將編譯完成後的模塊so文件拷貝到Apache目錄下: # cp modules/Test.so /usr/local/apache2/htdocs/ 在/usr/local/apache2/htdocs/目錄下編輯PHP文件 # vi test.php 文件中的代碼如下: <?php
dl(“Test.so”);
echo test();
?> 啟動Apache,訪問test.php,成功的話頁面上會顯示和main()函數同樣的輸出結果。
本文出自 “玄武·巴依” 博客,請務必保留此出處http://commandos.blog.51cto.com/154976/130700