C語言linux環境下寫php擴展

更多技術交流加羣:242722019

 

Linux環境下用C語言寫php擴展

一、   預定義

在任意目錄下寫一個文件,內容是希望定義的函數名以及參數:

列:假設在php源代碼ext擴展目錄下定義一個myfunctions.def



二、   用ext_skel腳本建立骨架

該腳本在php源代碼的ext目錄下,在ext目錄下輸入命令


在ext中生成一個叫myfunctions的目錄


進入 myfunctions目錄有以下幾個文件


修改config.m4文件


把這3行前面的dnl去掉

修改myfunctions.c文件

找到剛纔自定義的函數的位置

PHP_FUNCTION(add)

PHP_FUNCTION(self_concat)

對函數進行修改


三、   進行初始化


編譯安裝


配置成功會顯示

 

最後編譯安裝 make && make install


將生成的myfunctions.so拷貝到php加載extension的目錄下


在php.ini中加載擴展


檢查是否有myfunctions擴展


重啓apache 查看phpinfo中是否有加載myfunctions擴展

最後在php文件測試函數是否成功

 


PHP函數中返回值

擴展API包含豐富的用於從函數中返回值的宏。這些宏有兩種主要風格:第一種是RETVAL_type()形式,它設置了返回值但C代碼繼續執行。這通常使用在把控制交給腳本引擎前還希望做的一些清理工作的時候使用,然後再使用C的返回聲明 ”return” 返回到PHP;後一個宏更加普遍,其形式是RETURN_type(),他設置了返回類型,同時返回控制到PHP。下表解釋了大多數存在的宏。

設置返回值並且結束函數

設置返回值

宏返回類型和參數

RETURN_LONG(l)

RETVAL_LONG(l)

整數

RETURN_BOOL(b)

RETVAL_BOOL(b)

布爾數(10)

RETURN_NULL()

RETVAL_NULL()

NULL

RETURN_DOUBLE(d)

RETVAL_DOUBLE(d)

浮點數

RETURN_STRING(s, dup)

RETVAL_STRING(s, dup)

字符串。如果dup1,引擎會調用estrdup()重複s,使用拷貝。如果dup0,就使用s

RETURN_STRINGL(s, l, dup)

RETVAL_STRINGL(s, l, dup)

長度爲l的字符串值。與上一個宏一樣,但因爲s的長度被指定,所以速度更快。

RETURN_TRUE

RETVAL_TRUE

返回布爾值true。注意到這個宏沒有括號。

RETURN_FALSE

RETVAL_FALSE

返回布爾值false。注意到這個宏沒有括號。

RETURN_RESOURCE(r)

RETVAL_RESOURCE(r)

資源句柄。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章