萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> 編寫自己的PHP擴展函數

編寫自己的PHP擴展函數

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

copyright © 萬盛學電腦網 all rights reserved