程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> PHP5自定義Module開發

PHP5自定義Module開發

編輯:關於C語言

本文中需要用到上一篇文章中生成的調用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[] = {    
                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
四、測試Module
將編譯完成後的模塊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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved