第乙個有點作用的PHP擴充套件

2022-03-09 11:50:44 字數 2642 閱讀 5477

c/c++去開發php擴充套件

我覺的對於php開發人員來說,學的東西非常雜,也非常多,當然了開發php擴充套件也是乙個必須要掌握的技能,這裡膜拜下大神鳥哥(laruence)~

今天要開發的第乙個有點功能的擴充套件,主要作用是記錄日誌的時候生成日誌前面的日期部分

#即使當前的時間,年-月-日 時:分:秒 時間戳.微妙數 

[2015-05-19 20:39:32 1432039172.968199]

php擴充套件函式前奏

首先生成」骨架「:

1. 進入php原始碼src/ext目錄下面

2. 執行./ext_skel --extname=mytest

3. 進入src/ext/mytest/目錄

4. 在編寫擴充套件的時候要先修改下config.me檔案的10-12行,去掉前面的dnl注釋,這個網上一搜一大把。

在標頭檔案php_mttest.h中宣告要編寫的php擴充套件函式名
php_function(get_log_title);

#php_function是php核心中宣告的乙個巨集

#define php_function zend_function //在檔案src/main/php.h : 347行

#define zend_function(name) zend_named_function(zend_fn(name)) //檔案src/zend/zend_api.h : 68行

#define zend_fn(name) zif_##name //檔案src/zend/zend_api.h : 65行

#define zend_named_function(name) void name(internal_function_parameters) //檔案src/zend/zend_api.h : 67行

#define internal_function_parameters int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used tsrmls_dc //src/zend/zend.h : 290行

上面的宣告函式巨集展開後是:

void zif_get_log_title( int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used tsrmls_dc)
在mytest.c中的zend_function_entry宣告中新增get_log_title函式的宣告
const zend_function_entry logs_functions = ;

#編寫函式

php_function(get_log_title)

這裡還要看個巨集return_string

#define return_string(s, duplicate) 			//檔案src/zend/zend_api.h : 635行

#define retval_string(s, duplicate) zval_string(return_value, s, duplicate) //檔案src/zend/zend_api.h : 623行

#define zval_string(z, s, duplicate) do while (0)

因此,return_string(formatinfo, 1)展開後為:

do
編譯測試
編譯的時候需要安裝好的php,比如我的php安裝在/usr/local/php/目錄下面

cd mytest; //今日剛才編寫的函式擴充套件目錄

/usr/local/php/bin/phpize //執行phpize,生成configure檔案

./configure --with-php-config=/usr/local/php/bin/php-config //configure,後面的--with-php-config會生成so檔案到安裝好的擴充套件目錄,當然也可以不用加,聲稱之後手動copy過去

make //有錯誤的話修正

make install //執行之後會提示類似下面的內容

#installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

#修改配置檔案php.ini新增extension = mytest.so

#測試php -r 'var_dump(log_get_title());'

輸出下面內容的話,恭喜你成功了

[root@iforever logs]# php -r 'var_dump(get_log_title());' && date

string(39) "[2015-05-19 22:52:29 1432047149.755613]"

2023年 05月 19日 星期二 22:52:29 cst

5/19/2015 10:54:38 pm

第乙個php5 6擴充套件

1.到php源資料夾下面的ext資料夾 2.執行.ext skel,從說明可以看到,我們只需要執行.ext skel extname liushunqiu,這樣便建立了乙個liushunqiu擴充套件了 3.進入liushunqiu資料夾下面,編輯config.m4檔案.修改如下圖 4.編輯lius...

PHP 拓展 開發,PHP擴充套件開發 第乙個擴充套件

我們先假設業務場景,是需要有這麼乙個擴充套件,提供乙個叫ccvita string的函式,他的主要作用是返回一段字元。這個業務場景實在太假,大家就這麼看看吧 對應的php 可能是這樣 function ccvita string str result link return result 第一步,生...

python第乙個程式設計 第乙個 Python 程式

簡述 安裝完 python 後,windows 中 開始選單或安裝目錄下就會有 idle 開發 python 程式的基本 ide 整合開發環境 幫助手冊 模組文件等。linux 中 只需要在命令列中輸入 python 命令即可啟動互動式程式設計。互動式程式設計 互動式程式設計不需要建立指令碼檔案,是...