用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,即可看到自己的擴展: