{eval=Array;=+count(Array);}
PHP(“PHP: Hypertext Preprocessor”,超文本預處理器的字母縮寫)是一種被廣泛應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤其適合 web 開發。
最初是1994年Rasmus Lerdorf創建,只是一個簡單的用Perl語言編寫的程序,后來用C語言重構,可以訪問數據庫,在1995年對外發表了第一個版本。
編程范型是面向對象、命令式編程的語法吸收了C語言、Java和Perl的特點,利于學習,使用廣泛;其PHP獨特的語法混合了C、Java、Perl以及PHP自創的語法。
簡單來說就是動態腳本語言,開發網站、輕應用最好的一門弱類型、服務器端語言;簡單靈活、輕量便捷,很是適合新手入門!
在網站開發中,用于網頁數據交互、動態效果實現,且可以執行編譯后的代碼,編譯還可以達到加密和優化代碼運行,執行更加快速,大大的減少了系統資源的消耗。
現在的數據庫以及操作系統PHP一般都支持,PHP可使用抽象層如“PDO”,或者過 ODBC 擴展連接到任何支持 ODBC 標準的數據庫。
在這基礎上PHP還有一個強大的圖像處理系統,CGI的功能PHP全部都能實現,它包含了命令列執行接口(command line interface),或者產生圖形使用者接口(GUI)程式。
另外還有一個跨平臺的特性,可以運行在多平臺(如LINUX、UNIX、Mac OS、WINDOWS、Android等)。
PHP代碼屬于開源所以說完全可以免費下載使用,沒有成本。
tep 1 =>
php的擴展模塊都放在 ext/ 目錄下,比如說 snmp模塊、mysql模塊。 我們要建立自己的模塊,就要在ext目錄下為自己的模塊建一個目錄。比如,我們要做一個分析config文件的模塊,命名為pconfig模塊(parse config的簡寫),需在ext下建立目錄pconfig。將我寫好的7個文件copy到該目錄下,另外需對主目錄下的configure和internal_functions.c作一些修改。
Step 2 =>
Makefile.am Makefile.in
是模板文件,用戶執行configure時,會調用這兩個文件,生成編譯時所用的Makefile文件。修改時將小寫的pconfig換成你自己的模塊名,別忘了把大寫的PCONFIG也替換掉(不要告訴我你不會vi的替換語句)。config.m4也是執行configure將會調用的檢測腳本程序,以后我們來討論這些腳本程序的更深入的修改。現在你只需要把pconfig該成你的模塊就可以了。對config.h.stub和setup.stub也如法炮制。其實setup.stub也沒什么用。
Step 3 =>
php3-pconfig.h 頭文件中
extern php3_module_entry pconfig_module_entry;
#define pconfig_module_ptr &pconfig_module_entry
#define phpext_pconfig_ptr pconfig_module_ptr
這幾行定義了模塊的入口,將入口注冊到php后,php會通過模塊入口找到你寫的函數
下面幾個函數定義是用宏進行定義的,展開以后其實就是 php3_minit_pconfig , php3_rinit_pconfig ……分別在你的模塊初試化或結束時被調用,如果你的模塊很簡單,也就不需要這些定義了
extern PHP_MINIT_FUNCTION(pconfig);
extern PHP_RINIT_FUNCTION(pconfig);
extern PHP_MSHUTDOWN_FUNCTION(pconfig);
PHP_MINFO_FUNCTION(pconfig);
這是你的函數聲明,將來寫在php腳本語句中的函數名就是在PHP_FUNCTION中定義的名字。
PHP_FUNCTION(pconfig_test);
如果有多個,還可以繼續往下加
PHP_FUNCTION(pconfig_parsefile);
PHP_FUNCTION(pconfig_release); …….
Step 4 =>
接下來我們看最重點的C代碼了
function_entry pconfig_functions[] = {
PHP_FE(pconfig_test, NULL)
{NULL, NULL, NULL}
};
定義的是你的函數的入口(前面我們提到過模塊的入口),按照格式將你在頭文件中定義的函數寫進去吧。注意,這是用宏定義的,不要管語法是否正確。以后我們具體討論這些宏的用法。
php3_module_entry pconfig_module_entry = {
"pconfig", pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES
};
注冊模塊的入口信息,比如模塊名,函數接口,初試化模塊將調用的函數等等,如果你的模塊不執行復雜操作的話,可以忽略掉他們,寫成
php3_module_entry pconfig_module_entry = {
"pconfig", pconfig_functions, NULL,NULL,NULL,NULL,NULL,STANDARD_MODULE_PROPERTIES
};
Step 5 =>
寫你自己的函數
在頭文件和function_entry處,我們已經定義了自己的函數pconfig_test,現在我們就來實現pconfig_test的功能。就比如執行兩個數相加的和吧。
static void _php3_pconfig_test(INTERNAL_FUNCTION_PARAMETERS)
{ ......
}
PHP_FUNCTION(pconfig_test)
{
_php3_pconfig_test(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
當系統調用pconfig_test時,會調用你的_php3_pconfig_test函數,當然你也可以把_php3_pconfig_test里的內容直接寫在PHP_FUNCTION(pconfig_test)中,這樣做只是程序結構比較清晰。注意:不要將_php3_pconfig_test命名成php3_pconfig_test,PHP_FUNCTION(pconfig_test)宏展開后實際上就是php3_pconfig_test!
Step 6 =>
好了,現在我們開始修改configure,在echo $ac_n "checking for MySQL support""... $ac_c" 1>&6的前面(當然,如果你熟悉configure的話,可以加在任何合適的地方)加上下面幾句話
if test "${with_pconfig+set}" = set; then
withval="$with_pconfig"
# Add your lib in here
EXTRA_LIBS="$EXTRA_LIBS"
# Add your include path in here
INCLUDES="$INCLUDES"
EXT_SUBDIRS="$EXT_SUBDIRS pconfig"
EXT_LIBS="$EXT_LIBS pconfig/libphpext_pconfig.a"
EXTINFO_DEPS="$EXTINFO_DEPS ../ext/pconfig/extinfo.c.stub"
EXT_STATIC="$EXT_STATIC pconfig"
fi
修改internal_functions.c,在頭文件定義中加入#include "ext/pconfig/php3_pconfig.h"
在zend_module_entry數組中加入phpext_pconfig_ptr,
Step 7 =>
從新configure,帶上需要的參數,不要忘記的是在參數里加入 --with-pconfig
Step 8 =>
index.php3
<? echo pconfig_test(123,678)."
"; ?>
執行%>php index.php3
2
回答0
回答0
回答0
回答1
回答0
回答0
回答0
回答0
回答10
回答