程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 探討:如何編寫PHP擴展

探討:如何編寫PHP擴展

編輯:關於PHP編程

用C/C++擴展PHP的優缺點:
優點:
效率,還是效率
減少PHP腳本的復雜度, 極端情況下, 你只需要在PHP腳本中,簡單的調用一個擴展實現的函數,然後你所有的功能都就被擴展實現了
而缺點也是顯而易見的:
開發復雜
可維護性降低
開發周期變長, 最簡單的一個例子,當你用PHP腳本的時候, 如果你發現某個判斷條件出錯,你只要修改了這一行,保存,那麼就立刻能見效。 而如果是在C/C++編寫的PHP擴展中, 那你可需要,修改源碼,重新編譯,然後重新load進PHP, 然後重啟Apache,才能見效。
如果你熟悉C,那麼編寫一個PHP擴展,並不是什麼非常難的事情。 PHP本身就提供了一個框架,來簡化你的開發。
最簡單的方式來開始一個PHP擴展的開發,是使用PHP提供的擴展框架wizard ext_skel, 它會生成一個PHP擴展所必須的最基本的代碼, 要使用它,首先你要下載PHP的源碼,或者開發包, 進入PHP源碼的ext目錄, 就會發現這個工具。
生成一個擴展:
./ext_skel --extname=myext
進入/myext,選擇擴展類型:
vi config.m4
下面兩種類型選一個就行了:
復制代碼 代碼如下:
//(依賴外部庫)
dnl PHP_ARG_WITH(myext, for myext support,
dnl Make sure that the comment is aligned:
dnl [ --with-myext Include myext support])
//去掉dnl
 PHP_ARG_WITH(myext, for myext support,
 Make sure that the comment is aligned:
 [  --with-myext             Include myext support])

//或者將 //(不依賴外部庫) dnl PHP_ARG_ENABLE(myext, whether to enable myext support,dnl Make sure that the comment is aligned:dnl [ --enable-myext Enable myext support])//去掉dnl
修改頭文件php_myext.h:
//PHP_FUNCTION(confirm_myext_compiled); /* For testing, remove later. */
//修改為
PHP_FUNCTION(myext); /* For testing, remove later. */
修改myext.c:
//將
//zend_function_entry myext_functions[] = {
// PHP_FE(confirm_myext_compiled, NULL) /* For testing, remove later. */
// {NULL, NULL, NULL} /* Must be the last line in myext_functions[] */
//};
//修改為
zend_function_entry myext_functions[] = {
PHP_FE(myext, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in myext_functions[] */
};
//在文件底部添加自己的函數
PHP_FUNCTION(myext)
{
zend_printf("Hello World!\n");
}
安裝自己的php擴展myext:
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install


修改php.ini,添加:
extension = "myext.so"
重啟web服務器,查看phpinfo,即可看到自己的擴展:



新建測試php文件:

<?php
myext();

執行此文件,即可看到再熟悉不過的“Hello World!”。



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