探討:如何編寫PHP擴(kuò)展
用C/C++擴(kuò)展PHP的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
效率,還是效率
減少PHP腳本的復(fù)雜度, 極端情況下, 你只需要在PHP腳本中,簡(jiǎn)單的調(diào)用一個(gè)擴(kuò)展實(shí)現(xiàn)的函數(shù),然后你所有的功能都就被擴(kuò)展實(shí)現(xiàn)了
而缺點(diǎn)也是顯而易見的:
開發(fā)復(fù)雜
可維護(hù)性降低
開發(fā)周期變長(zhǎng), 最簡(jiǎn)單的一個(gè)例子,當(dāng)你用PHP腳本的時(shí)候, 如果你發(fā)現(xiàn)某個(gè)判斷條件出錯(cuò),你只要修改了這一行,保存,那么就立刻能見效。 而如果是在C/C++編寫的PHP擴(kuò)展中, 那你可需要,修改源碼,重新編譯,然后重新load進(jìn)PHP, 然后重啟Apache,才能見效。
如果你熟悉C,那么編寫一個(gè)PHP擴(kuò)展,并不是什么非常難的事情。 PHP本身就提供了一個(gè)框架,來簡(jiǎn)化你的開發(fā)。
最簡(jiǎn)單的方式來開始一個(gè)PHP擴(kuò)展的開發(fā),是使用PHP提供的擴(kuò)展框架wizard ext_skel, 它會(huì)生成一個(gè)PHP擴(kuò)展所必須的最基本的代碼, 要使用它,首先你要下載PHP的源碼,或者開發(fā)包, 進(jìn)入PHP源碼的ext目錄, 就會(huì)發(fā)現(xiàn)這個(gè)工具。
生成一個(gè)擴(kuò)展:
./ext_skel --extname=myext
進(jìn)入/myext,選擇擴(kuò)展類型:
vi config.m4
下面兩種類型選一個(gè)就行了:
//(依賴外部庫)
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[] */
};
//在文件底部添加自己的函數(shù)
PHP_FUNCTION(myext)
{
zend_printf("Hello World!\n");
}
安裝自己的php擴(kuò)展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服務(wù)器,查看phpinfo,即可看到自己的擴(kuò)展:

新建測(cè)試php文件:
<?php
myext();
執(zhí)行此文件,即可看到再熟悉不過的“Hello World!”。
相關(guān)文章
PHP下用rmdir實(shí)現(xiàn)刪除目錄的三種方法小結(jié)
PHP本身有一個(gè)rmdir()函數(shù)可以用來刪除目錄,不過要求必須是空目錄,本文列舉了三種方法。1、遞規(guī)法;2、系統(tǒng)調(diào)用法;3、循環(huán)法 。2008-04-04
php函數(shù)之子字符串替換 str_replace
php函數(shù)str_replace: 返回一個(gè)字符串或者數(shù)組。該字符串或數(shù)組是將 subject 中全部的 search 都被 replace 替換之后的結(jié)果。2011-03-03
PHP獲取MySQL執(zhí)行sql語句的查詢時(shí)間方法
今天小編就為大家分享一篇PHP獲取MySQL執(zhí)行sql語句的查詢時(shí)間方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
PHP header()函數(shù)常用方法總結(jié)
這篇文章主要介紹了PHP header()函數(shù)常用方法.總結(jié)了常見的用法,需要的朋友可以參考下2014-04-04
Linux系統(tǒng)中設(shè)置多版本PHP共存配合Nginx服務(wù)器使用
這篇文章主要介紹了Linux系統(tǒng)中設(shè)置多版本PHP共存配合Nginx服務(wù)器使用的技巧,依靠php-fpm工具來進(jìn)行管理,需要的朋友可以參考下2015-12-12
PHP生成隨機(jī)用戶名和密碼的實(shí)現(xiàn)代碼
使用PHP生成隨機(jī)數(shù)可以應(yīng)用在許多地方,比如可以設(shè)計(jì)程序的隨機(jī)密碼、模擬擲骰子游戲的應(yīng)用程序、石頭剪子布游戲應(yīng)用程序等等2013-02-02
php 使用file_get_contents讀取大文件的方法
本文介紹了在php中使用file_get_contents函數(shù)讀取大文件的方法,并附上了示例以及使用小技巧,非常的實(shí)用,這里推薦給大家2014-11-11

