1、最重要的entry:比如exif裡的:zend_module_entry exif_module_entry
struct _zend_module_entry ;
引數 描述
size, zend_api, zend_debug and zts 通常使用standard_module_header來填充,
name 擴充套件的名稱
functions 指向zend_functions_entry指標
module_startup_func 模組初始化時被呼叫的函式指標。用來放一些初始化步驟。初始化過程**現故障返回failure,成功返回success。宣告乙個初始化函式使用zend_minit
module_shutdown_func 模組被關閉時呼叫的函式指標,同來用來做一次性的析構步驟。如釋放資源。
成功返回sucess,失敗返回failure,未使用返回null。宣告使用zend_mshutdown
request_startup_func 每處理一次請求前呼叫此函式。成功sucess,失敗failure,未使用返回null。宣告使用zend_rinit。
從web來解釋,就是每次請求呼叫此函式。
request_startup_func 每處理一次請求前後呼叫此函式。成功sucess,失敗failure,未使用返回null。宣告使用zend_rinit。
request_shutdown_func 每處理一次請求結束後呼叫此函式。成功sucess,失敗failure,未使用返回null。宣告使用zend_rshutdown。
info_func 當呼叫phpinfo()時列印出的關於此擴充套件的資訊。
這個資訊就是由此函式來輸出的。
宣告使用zend_minfo
version 擴充套件的字串版本號。若無版本號,可以使用no_version_yet
[more] 多餘不重要的引數,可以使用巨集standard_module_properties_ex或standard_module_properties
2、function:
宣告在:zend_function_entry:
function:php_fe(exif_imagetype, arginfo_exif_imagetype) 對應的實現是php_function(exif_imagetype)
class function:php_me(study_ext_class,print,null,zend_acc_public) 對應的實現是php_method(study_ext_class,print)
3、獲取引數:
從7.0開始有fast_zpp,之前用zend_parse_parameters
zend_string *type;
zval *value = null;
#ifndef fast_zpp
/* get function parameters and do error-checking. */
if (zend_parse_parameters(zend_num_args(), "s|z", &type, &value) == failure)
#else
zend_parse_parameters_start(1, 2)
z_param_str(type)
z_param_optional
z_param_zval_ex(value, 0, 1)
zend_parse_parameters_end();
#endif
z_param_*詳細情況如下:
specifier
fast zpp api macro
args
|
z_param_optional
az_param_array(dest)
dest - zval*
az_param_array_or_object(dest)
dest - zval*
bz_param_bool(dest)
dest - zend_bool
cz_param_class(dest)
dest - zend_class_entry*
dz_param_double(dest)
dest - double
fz_param_func(fci, fcc)
fci - zend_fcall_info, fcc - zend_fcall_info_cache
hz_param_array_ht(dest)
dest - hashtable*
hz_param_array_or_object_ht(dest)
dest - hashtable*
lz_param_long(dest)
dest - long
lz_param_strict_long(dest)
dest - long
oz_param_object(dest)
dest - zval*
oz_param_object_of_class(dest, ce)
dest - zval*
pz_param_path(dest, dest_len)
dest - char*, dest_len - int
pz_param_path_str(dest)
dest - zend_string*
rz_param_resource(dest)
dest - zval*
sz_param_string(dest, dest_len)
dest - char*, dest_len - int
sz_param_str(dest)
dest - zend_string*
zz_param_zval(dest)
dest - zval*
z_param_zval_deref(dest)
dest - zval*
+z_param_variadic('+', dest, num)
dest - zval*, num int
*z_param_variadic('*', dest, num)
dest - zval*, num int
4、返回值:
return_null() 返回null
return_long(l) 返回整型
return_double(d) 返回浮點型
return_str(s) 返回乙個字串。引數是乙個zend_string * 指標
return_string(s) 返回乙個字串。引數是乙個char * 指標
return_stringl(s, l) 返回乙個字串。第二個引數是字串長度。
return_empty_string() 返回乙個空字串。
return_arr(r) 返回乙個陣列。引數是zend_array *指標。
return_obj(r) 返回乙個物件。引數是zend_object *指標。
return_zval(zv, copy, dtor) 返回任意型別。引數是 zval *指標。
return_false 返回false
return_true 返回true
5、元件依賴
宣告:zend_module_dep,比如pdo_mysql宣告依賴:
static const zend_module_dep pdo_mysql_deps = ;
centos下原始碼安裝php擴充套件
使用yum一直安裝擴充套件一直報錯,在網上找了原始碼安裝包方法,並總結了一下 3.進入對應的本地擴充套件目錄,以posix為例 cd usr include php ext posix usr include php ext posix 為本地擴充套件路徑 4.生成編譯檔案 phpize 5.指令碼...
php原始碼探索二 gdb的用法
用gdb開啟php測試 gdb usr local php7 bin php 進入gdb模式。gdb用法如下 執行run 簡記為 r 其作用是執行程式,當遇到斷點後,程式會在斷點處停止執行,等待使用者輸入下一步的命令。continue 簡寫c 繼續執行,到下乙個斷點處 或執行結束 next 簡寫 n...
php擴充套件開發例項原始碼分享
3 php extension example.rar 訪問密碼 1146 學習時寫的demo 內有例項文件 4 yaf 2.1.9.tgz和yaf sample.tar 1.1.0.gz 訪問密碼 8e2f 風雪之隅開發的 5 zoeeyphp 1.1.zip 訪問密碼 b85b 網上收集zoee...