php程式寫的時間長了,自然對他所提供的功能了如指掌,他所提供的一大堆功能,真是覺得很好用,但有時候會發現php也缺少一些功能,自己總是會產生為php添加一些自訂的功能的想法。久而久之,終於今天憋不住了,開始動手研究如何添加。
下載一個php的原始碼包,這裡使用的是php 4.0.5版,解壓後會看到php的根目錄下會有README.EXT_SKEL這樣一個檔案,開啟具體閱讀了一下,發現了一個非常好用的工具,這個工具可以幫你構建一個空的php擴充,然後你向裡面添加相應的代碼就可以完成你自己的功能擴充了。下面我們就來介紹如何使用這個工具。
首先轉移你的目錄到php的目錄下的ext目錄,假如你只需要一個基本的擴充架構的話,執行下面的命令:
./ext_skel --extname=module_name
module_name是你自己可以選擇的擴充模組的名字,例如我選擇的my_module。執行工具後會自動在ext目錄下建立你選擇的module_name名字的目錄,裡面已經產生了相關的代碼,這些代碼中只需要調整config.m4檔案中的三行注釋就可以正常的編譯帶這個自訂擴充模組的php了。在php的根目錄執行下列操作就可以得到。
./buildconf
./configure --enable-module_name
make
下面我來示範建立my_module擴充架構的全過程,為了更有效果,我們來完成一個php的擴充功能,在php中調用這個功能可以在web頁面中顯示hello world這個經典單詞。
在php目錄下的ext目錄中,執行下面的命令
./ext_skel --extname=my_module
得到反饋結果:
Creating directory my_module
Creating basic files: config.m4 Makefile.in .cvsignore my_module.c php_my_module.h tests/001.phpt my_module.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/my_module/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-my_module
5. $ make
6. $ ./php -f ext/my_module/my_module.php
7. $ vi ext/my_module/my_module.c
8. $ make
Repeat steps 3-6 until you are satisfied with ext/my_module/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
在檔案的最後添加下列代碼
PHP_FUNCTION(say_hello)
{
zend_printf("hello worldn");
}
儲存檔案退出
vi php_my_module.h
在檔案中PHP_FUNCTION(confirm_my_module_compiled);一行前面添加下面的代碼
PHP_FUNCTION(say_hello);
儲存檔案退出
退回到php的根目錄下,執行下面的命令
./buildconf
./configure --enable-my_module
make
假如一切順利的話,我們現在已經將擴充模組my_module編譯到php裡面了。我們編寫下面的代碼進行測試
Say_hello();
?>
儲存檔案為say_hello.php
在php的根目錄下運行
./php