php原始碼探索四 php擴充套件原始碼分析

2021-10-01 19:04:54 字數 3747 閱讀 9954

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...