-
1 # Summy薇
-
2 # 灬亦凡
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
回覆列表
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程式碼屬於開源所以說完全可以免費下載使用,沒有成本。