php5.6擴展編寫,php 5.6版本中編寫一個PHP擴展的簡單示例

php 5.6版本中編寫一個PHP擴展的簡單示例

這篇文章主要介紹了php 5.6版本中編寫一個PHP擴展的簡單示例,本文給出擴展實現代碼、編譯方法、配置方法和使用例子等內容,需要的朋友可以參考下

有時候在php本身沒有滿足需求的api時候,需要自己寫相應的擴展,擴展寫完之后進行編譯,即可加入自己的開發環境中,擴展php的功能。

這里實現一個連接字符串和int型數的連接操作的簡單擴展。

首先,下載最新的php源碼安裝包,進入ext/目錄,新建extstrcat.def:

代碼如下:

string extstrcat(string strarg, int intarg)

隨后運行:

代碼如下:

./ext_skel --extname=extstrcat --proto=extstrcat.def

修改ext/extstrcat/config.m4,去掉如下行前面的注釋(dnl):

代碼如下:

PHP_ARG_ENABLE(extstrcat, whether to enable extstrcat support,

Make sure that the comment is aligned:

[ --enable-extstrcat Enable extstrcat support])

此時來編輯ext/extstrcat/extstrcat.c,找到PHP_FUNCTION(extstrcat)函數,這里表示擴展中的方法名為extstrcat,方法實現如下:

代碼如下:

PHP_FUNCTION(extstrcat)

{

char *strarg = NULL;

int argc = ZEND_NUM_ARGS();

int strarg_len;

long intarg;

char intargstr[10];

int retstrlen = 0;

char *retstr = NULL;

if (zend_parse_parameters(argc TSRMLS_CC, "sl", &strarg, &strarg_len, &intarg) == FAILURE)

return;

snprintf(intargstr, 9, "%d", intarg);

retstrlen = strarg_len + strlen(intargstr) + 1;

retstr = (char *)malloc(sizeof(char)* retstrlen);

memset(retstr, '\0', retstrlen);

strncat(retstr, strarg, strlen(strarg));

strncat(retstr, intargstr, strlen(intargstr));

RETURN_STRING(retstr, 1);

php_error(E_WARNING, "extstract: not yet implemented");

}

,其中strarg和intarg即為對應的兩個字符串和整型參數。

接下來要做的事情就是編譯擴展,

代碼如下:

phpize

./configure --enable-extstrcat

make

編譯成功之后,在ext/modules目錄下會生成extstrcat.so文件,

代碼如下:

cp ./modules/extstrcat.so /usr/local/lib/php/extensions/no-debug-non-zts-20121212/

修改php.ini,增加extension = extstrcat.so。

重啟php-fpm,運行phpinfo()可以看到新增了extstrcat擴展。

現在來寫一個Demo,測試一下剛剛的php擴展,

代碼如下:

,命令行下運行該文件,得到testarg1234.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534813.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iis php 數據庫亂碼,如何解決php插入數據亂碼問題

php插入數據亂碼的解決辦法:首先要設置數據表的字符集為utf8;然后修改字符集格式;接著建立字符集為utf-8的數據庫;最后通過php mysql語句插入數據即可。mysql數據庫亂碼問題解決辦法我們在使用數據庫(mysql)的時候最怕的就是數據庫…

python 文檔字符串_新款Python文檔字符串生成器來了

又一款懶人神器問世了:Visual Studio Code的擴展,基于CodeBERT的Python文檔字符串生成器。看來現在,這群偷「懶」的程序員們連文檔字符串都不想自己寫了。基于CodeBERT的生成器跟正常的DocStrings用法一樣,你只需要輸入三引號「“…

php 棧實現歷史記錄后退,棧:如何實現瀏覽器的前進和后退功能

受限制的線性表先進后出實現一個棧數組實現叫順序棧public class ArrayStack {private String[] items;//存儲數據的數組private int count;//棧中的元素private int n;//棧的大小public ArrayStack(int n){this.items new String[n];this.n n;this.count 0;}//入棧操作publ…

vc 通過句柄修改窗口大小_VC應用(1)通過VC修改銷售訂單行項目的字段

VC是SAP中非常重要的功能,過去多年來,我參與了不少使用VC的項目,我將通過多篇文章介紹VC的一些應用,本文介紹通過VC修改銷售訂單行項目的字段01 概覽在銷售訂單創建時,對于可配置物料來說,不同的配置可能會…

mysql增加實例,MySQL的簡單使用筆記:增加實例以及啟動

增加實例增加實例這里指的的在源碼編譯安裝完MySQL之后建立一個初始的數據庫實例,占用某一端口,或者是使用新端口啟動新的mysqld進程。MySQL需要一些基礎的數據庫以及表來完成基本的設定,比如控制連接的mysql.user表:123456789101…

springboot starter工作原理_98,談談SpringBoot的工作原理

對技術的探索,一切源于好奇心,保持好奇心,才能讓人更年輕。至今,我們已經有了很多創建SpringBoot項目的經驗,比如我們要創建一個支持web開發的項目,我們只需要引入web-starter模塊即可。那么,Sp…

精英主義 遺傳算法 matlab,遺傳算法優化 - osc_lfs4vsih的個人空間 - OSCHINA - 中文開源技術交流社區...

1.遺傳算法簡介遺傳算法是一種基于自然選擇和群體遺傳機理的搜索算法,它模擬了自然選擇和自然遺傳過程中的繁殖、雜交和突變現象.再利用遺傳算法求解問題時,問題的每一個可能解都被編碼成一個“染色體”,即個體,若干個個體構成了群體(所有可能解).在遺傳算法開始時,總是隨機的產…

python 類靜態屬性_如何從Python中的類中引用靜態屬性?

您面臨的問題是因為您不了解類聲明的作用域是如何工作的。類聲明在其自己的作用域內執行。執行完成后,將創建一個新的類對象,并將獲得的范圍作為其__dict__附加到該類。在注意:類范圍是從方法范圍內搜索的而不是!這意味著當在方法…

php后臺管理員登錄密碼錯誤,如果后臺管理員的密碼錯誤,我該怎么辦,還有兩種找回密碼的方法...

Dedecms是中國著名的網站管理核心. 由于編織夢想簡單易用,因此可以進行二次開發,并且可以實現各種網站. 在使用dedecms的過程中,如果忘記了夢想管理后臺的密碼怎么辦?神山個人博客分享了兩種修改(重置)管理員密碼的方法.1. 下載織…

python logging模塊 默認_python logging模塊

函數式簡單配置importlogginglogging.debug(debug message) #計算或者工作的細節logging.info(info message) #記錄一些用戶的增刪改查的操作logging.warning(warning message) #警告操作logging.error(error message) #警告操作logging.critical(critical message) #批判的 直…

mac安裝多php環境變量配置,Mac如何安裝多個php版本

Mac安裝多個php版本的方法:首先打開Mac上的終端工具,并確認安裝Homebrew;然后安裝【php5.5】及對應擴展;最后執行指令【brew unlink php55】刪除brew中php的軟鏈即可。Mac安裝多個php版本的方法:1、打開Mac上的終端工具…

phpexcel 獲取工作簿名稱_工作分享 | Excel快速匯總考勤

點擊藍字關注我們每月月底,各位同事把考勤表報到部門后,檢查核對再匯總一份總考勤表上報,傳統的復制粘貼總是占用不少時間,還容易出錯。為提高工作效率,現利用Excel實現考勤快速匯總。01 統一考勤模板,每個…

php進程通訊方式,PHP進程模型、進程通訊方式、進程線程的區別分別有哪些?

PHP進程模型是一個正在執行的程序,可以分配給處理器并由處理器執行的一個實體;PHP進程通訊方式有管道及有名管道,信號,共享內存等;PHP進程線程的區別有進程是資源的分配和調度的一個獨立單元,而線程是CPU調…

iphone怎樣關閉副屏_小米新設計專利曝光:“Z”型折疊屏手機

折疊屏手機可以說是最近幾年的熱門話題,雖然并未大面積普及,但已有多家廠商量產上市了旗下的折疊屏手機。同樣作為知名廠商的小米,曾在此前展示過旗下的折疊屏手機視頻,但并未真正發布。而近日曝光的一份小米旗下專利設計則表明小…

php socket開發斗地主,基于狀態機模型的斗地主游戲(NodeJsSocketIO)

1. 系統結構系統考慮使用Nodejs和SocketIo實現服務器端邏輯,前端使用HTML5。2. 邏輯流程1 . 主要邏輯包括用戶進入游戲、等待對家進入游戲、游戲過程、結束統計這4個過程。2 . 游戲過程的邏輯具體如下3 . 服務器-客戶端通訊邏輯如下3. 客戶端界面設計1 . 登錄界面2 …

python幾何拼貼畫_圖形幾何圖形拼貼畫

四邊形教學內容:教材第34頁?——36頁教學目標:1.直觀感知四邊形,能區分和辨認四邊形,知道四邊形的特征.進一步認識長方形和正方形,知道它們的角都是直角.2.通過畫一畫、找一找、拼一拼等活動,培養學生[此文轉于斐斐課件園?FFKJ.Net]的觀察比較和概括抽象的能力,發展空間想象能…

wgs84轉經緯度_wgs84經緯度轉為cgcs2000平面坐標

航拍測繪中,pos數據多數是wgs84,而GCP坐標是2000或者80坐標。有如下2情況需要轉換坐標,1.不同坐標系刺點時,位置相差較遠,影響工作效率。2.該軟件不支持wgs84轉國家2000,比如photoscan。所以需要把pos數據轉為跟像控點…

php system 255,GitHub - dwg255/OA-SYS: OA辦公系統開源項目

OA-SYSOA辦公系統開源項目這是一套主要用于演示、學習為目的OA辦公自動化系統。該系統具備基本的自動化辦公功能。在使用前請確保您已閱讀本系統協議部分內容。主要功能列表用戶和用戶組、權限管理個人網盤和分享文件生產計劃任務和業績考評通訊錄和內部短消息公告系統個人工作…

wpcomments post.php,WordPress移動wp-comments-post文件防垃圾評論

將wp-comments-post文件移動到主題目錄中達到阻止垃圾評論。需要修改程序文件:一、首先打開Wordpress程序根目錄的wp-comments-pos.php文件,用:require( dirname(__FILE__) . /../../../wp-load.php );替換第16行的:require( dirn…

人工蜂群算法python_改進的人工蜂群算法解決聚類問題(在Python中的分步實現)...

在之前的文章中,我介紹了如何通過實施名為Artificial Bee Colony(ABC)的群集智能(SI)算法來解決現實世界中的優化問題。現在是時候讓我們掌握一些真實的數據并解釋我們如何使用我們的ABC算法的Python實現來執行群集任務。但在此之前,讓我們深入了解一下聚…