三分鐘編寫PHP可擴充套件模組
根據我的提示,三分鐘內你就能製作自己的PHP可擴充套件模組: 第一步:搭建模組框架
下載並解壓php原始碼,配置、編譯、安裝:
[[email protected] php-ext-demo]# tar jxvf php-5.2.5.tar.bz2 假設模組名字是sxgsystem,則執行如下命令生成模組框架:
[[email protected] ext]# pwd
/home/sxg/php-ext-demo/php-5.2.5/ext
[[email protected] ext]# ./ext_skel --extname=sxgsystem
進入目錄sxgsystem,可以看到上述命令生成了不少檔案,留下三個檔案php_sxgsystem.h、sxgsystem.c、sxgsystem.php,其餘的都刪除掉
[
[[email protected] sxgsystem]# ls
config.m4 config.w32 CREDITS EXPERIMENTAL php_sxgsystem.h sxgsystem.c sxgsystem.php tests
[[email protected] sxgsystem]# rm -rf config.m4 config.w32 CREDITS EXPERIMENTAL tests
加入一個Makefile後(請適當修改, 替換sxgsystem、SXGSYSTEM成為你的模組名字),就可以編譯了:
[
SO_NAME = sxgsystem
PHP_SRC = ../php-5.2.5
TARGET = $(SO_NAME).so
OBJS = $(SO_NAME).o CC = gcc
CFLAGS = -Wall -fpic -DCOMPILE_DL=1 -DCOMPILE_DL_SXGSYSTEM
INCLUDE = -I$(PHP_SRC) -I$(PHP_SRC)/main -I. -I$(PHP_SRC)/TSRM -I$(PHP_SRC)/Zend TARGET: $(OBJS)
$(CC) -shared -L/usr/local/lib -rdynamic -o $(TARGET) $(OBJS) %.o:%.c
$(CC) $(CFLAGS) $(INCLUDE) -o
rm -f *.o $(TARGET)
第二步:新增函式框架
在php_sxgsystem.h中新增函式宣告:
PHP_FUNCTION(get_memory_info);
PHP_FUNCTION(get_cpu_info); 在sxgsystem.c中填充入口,並實現之:
zend_function_entry sxgsystem_functions[] = {
PHP_FE(get_memory_info, NULL) /* Get Memory information */
PHP_FE(get_cpu_info, NULL) /* Get CPU information */
{NULL, NULL, NULL} /* Must be the last line in sxgsystem_functions[] */
}; PHP_FUNCTION(get_memory_info)
{
long ret;
zend_printf("get_memory_info is called\n");
RETURN_LONG(ret);
} PHP_FUNCTION(get_cpu_info)
{
long ret;
zend_printf("get_cpu_info is called\n");
RETURN_LONG(ret);
} 編譯生成sxgsystem.so:
[[email protected] sxgsystem]# make 用sxgsystem.php進行測試:
//sxgsystem.php
$br = (php_sapi_name() == "cli")? "":"
";
$module = "sxgsystem";
$MY_LIB = $module . "." . PHP_SHLIB_SUFFIX; if(!extension_loaded(module))
{
echo "loading php extention module : $MY_LIB... ";
dl($MY_LIB);
echo "done$br\n";
} $functions = get_extension_funcs($module);
echo "Functions available in the test extension:$br\n";
foreach($functions as $func) {
echo $func."$br\n";
}
echo "$br\n";
get_memory_info();
get_cpu_info(); ?> 測試一下:
[[email protected] sxgsystem]# php -f sxgsystem.php
loading php extention module : sxgsystem.so... done
Functions available in the test extension:
get_memory_info
get_cpu_info get_memory_info is called
get_cpu_info is called 注:執行的時候會提示sxgsystem.so不在某個目錄中,手動拷貝過去即可。 第三步:補充完整所新增的函式
第四步:編譯打包成so釋出 另外,用C++寫PHP擴充套件模組時,由於涉及到C和C++的名稱轉換問題,需要對C定義的標頭檔案用extern "C"包圍起來。 sxg
相關推薦
三分鐘編寫PHP可擴充套件模組
(本文由 song.xian-guang 原創,如果您覺得對您有幫助,請評論之,如需轉載,請指明連結;作者保留所有權利, 禁止商業用途) 根據我的提示,三分鐘內你就能製作自己的PHP可擴充套件模組: 第一步:搭建模組框架下載並解壓php原始碼,配置、編譯、安裝:
三分鐘編寫一款Xcode外掛
寫在前面 從事iOS開發也比較長時間了,起初的時候用了一些Xcode外掛之後感覺確實對開發幫助挺大,後來開始對Xcode外掛開發感興趣了,於是先後製作了AMMethod2Implement, AMAppExportToIPA 和 AMLocalizedStri
Asp.net 面向介面可擴充套件框架之資料處理模組及EntityFramework擴充套件和Dapper擴充套件(含乾貨)
原文: Asp.net 面向介面可擴充套件框架之資料處理模組及EntityFramework擴充套件和Dapper擴充套件(含乾貨) 介面資料處理模組是什麼意思呢?實際上很簡單,就是使用面向介面的思想和方式來做資料處理。 還提到EntityFramework和Dapper,EntityFramework和
linux 編寫 php擴充套件 小實驗
環境 Ubuntu 16.04, PHP 5.6 php擴充套件後門小實驗 git: https://github.com/Gekkoou/php-extension-backdoor 利用了 PHP SAPI 的生命週期, 當有請求的時候, 呼叫一次所有模組的
linux zephir 編寫 php 擴充套件 (docker篇)
鑑於編譯各版本的PHP擴充套件, 需要安裝與切換不同PHP版本後進行編譯, 很麻煩, 於是有了用 docker 編譯的想法. 搜尋相關資源發現已經有很多大牛們寫出來了, 就不重複造輪子了(其實就是自己菜寫不出) 方法1 不BB, 直接放程式碼, p神寫的 ze
Linux-LNMP-PHP擴充套件模組安裝
/usr/local/php/bin/php -m //檢視模組 下面安裝一個redis的模組cd /usr/local/src/ wget https://codeload.github.com/phpredis/phpredis/zip/develop mv develop phpredis-dev
PHP動態擴充套件Redis模組
檢視已有模組 [[email protected] ~]# /usr/local/php/bin/php -m [PHP Modules] bz2 Core ... zlib [Zend Modules] 下載包,解壓,生成configure檔案 [[email
[樂意黎原創]Centos主機動態安裝PHP的bcmath,Libmcrypt,mhash,mcrypt等擴充套件模組方法
如下,Centos裡啟動 php-fpm 時,控制檯總在拋若干警告。 [[email protected]] #service php-fpm start Starting php-fpm daemon is success[28-Nov-2018 17:45:40] NOTIC
為PHP新增memcache擴充套件模組
Memcache memcache是一套分散式的快取記憶體系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問資料庫的網站訪問速度提升效果十分顯著。 Memcache工作流程 先檢查客戶端
編寫優質軟體——程式碼可擴充套件性的幾種實施方式
程式碼可擴充套件性的幾種實施方式 《ThePragmaticProgrammer》(Addison-Wesley,1999)一書的作者DaveThomas和AndyHunt曾經說過,所有程式設計工作都是維護的一種形式。一個類在首次鍵入幾分鐘後就會進入無限的維護
動態新增php擴充套件模組
有時php編譯安裝好之後,發現摸個編譯引數漏掉了,需要的模組不支援但又不想重新編譯php,這時我們可以動態的新增php模組。 如我之前有一個編譯時漏掉了--enable-mbstring 現在給新增上。 新增擴充套件模組只要在php的安裝包裡找到相應的模組原始碼重新編譯後
Linux下擴充套件PHP的Redis模組,以及Laravel框架下擴充套件Redis模組
PHP的redis模組 2解壓 tar -zxvf redis-3.1.2.tgz 3進入redis-3.1.2目錄中 4使用phpize編碼 /usr/local/php7/bin/phpize(此處若是沒有,需要自己去下載更新一下) 5編譯./c
php反射機制以及利用php反射機制實現可插拔可擴充套件的外掛架構
反射是什麼? 它是指在PHP執行狀態中,擴充套件分析PHP程式,匯出或提取出關於類、方法、屬性、引數等的詳細資訊,包括註釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射API。 反射是操縱面向物件範型中元模型的API,其功能十分強大,可幫助我們構建複雜,可擴充
Python的C擴充套件模組的編寫(Anaconda+VS2013,python3.5和c++)
vs2013 調整生成配置,release和與python位數一致的平臺,這裡我選擇x64,因為我的python是64位 建立工程->32位專案->專案型別選DLL 配置工程屬性: ** 在.h檔案中,加入#include
linux下安裝php擴充套件模組gettext
安裝php的模組有兩種方式: 一、重新編譯php,加上--with-gettext 二、動態安裝 現在說下第二個動態安裝 1、下載同版本的php原包,解壓後進入ext目錄,目錄下便是模組 2、進入gettext目錄下執行: /usr/local/php/bin/phpize ./configur
QueryList 4.0 簡潔、優雅、可擴充套件的PHP採集工具(爬蟲)
QueryList 簡介 QueryList是一套簡潔、優雅、可擴充套件的PHP採集工具(爬蟲),基於phpQuery。 特性 擁有與jQuery完全相同的CSS3 DOM選擇器 擁有與jQuery完全相同的DOM操作API 擁有通用的列表採集方案
php 的rabbitmq 擴充套件模組amqp安裝
使用PHP開發,要使用中間佇列rabbitmq, 必須要安裝PHP的擴充套件模組amqp, 伺服器的環境是php7.1.18 ,centos 6.8, nginx 1.8 使用PHP的PECL命令:/usr/local/php/bin/pecl
在linux中使用phpize安裝php擴充套件模組
linux系統中,php安裝成功後,在bin目錄下會生成一個名叫phpize的可執行指令碼,這個指令碼的用途是動態安裝php擴充套件模組。 使用phpize指令碼安裝php擴充套件模組的好處:在安裝php時沒有安裝的擴充套件,可以在以後隨時安裝上,且不需要重新安裝PHP。 安裝步驟: 1、切換到擴充套件
ZStack雲端計算架構探祕(三): 超強靈活性和可擴充套件性
在前面探祕一和探祕二中,我們已經分享了ZStack的拓撲結構和如何實現超高可伸縮性的能力。還記得我們在Why ZStack中說的,穩定性和靈活性是IaaS需要解決的兩大問題。今天我們就來揭開ZStack超強靈活性的奧祕。 今天的內容非常的豐富,我們先來看一下什麼是靈活性。所
1分鐘鏈圈 | 全球公有鏈技術評估,星雲鏈位列全球第三!以太坊擴充套件解決方案Raiden釋出新測試網路...
Hi,艾瑞巴蒂!這裡是 7 月 20 日的每日1句話新聞晚報,只需1分鐘,看看全球最熱、最新的區