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