探讨:如何编写PHP扩展_php技巧
用C/C++扩展PHP的优缺点:
优点:
效率,还是效率
减少PHP脚本的复杂度, 极端情况下, 你只需要在PHP脚本中,简单的调用一个扩展实现的函数,然后你所有的功能都就被扩展实现了
而缺点也是显而易见的:
开发复杂
可维护性降低
开发周期变长, 最简单的一个例子,当你用PHP脚本的时候, 如果你发现某个判断条件出错,你只要修改了这一行,保存,那么就立刻能见效。 而如果是在C/C++编写的PHP扩展中, 那你可需要,修改源码,重新编译,然后重新load进PHP, 然后重启Apache,才能见效。
如果你熟悉C,那么编写一个PHP扩展,并不是什么非常难的事情。 PHP本身就提供了一个框架,来简化你的开发。
最简单的方式来开始一个PHP扩展的开发,是使用PHP提供的扩展框架wizard ext_skel, 它会生成一个PHP扩展所必须的最基本的代码, 要使用它,首先你要下载PHP的源码,或者开发包, 进入PHP源码的ext目录, 就会发现这个工具。
生成一个扩展:
./ext_skel --extname=myext
进入/myext,选择扩展类型:
vi config.m4
下面两种类型选一个就行了:
//(依赖外部库)
dnl PHP_ARG_WITH(myext, for myext support,
dnl Make sure that the comment is aligned:
dnl [ --with-myext Include myext support])
//去掉dnl
PHP_ARG_WITH(myext, for myext support,
Make sure that the comment is aligned:
[ --with-myext Include myext support])
//或者将 //(不依赖外部库) dnl PHP_ARG_ENABLE(myext, whether to enable myext support,dnl Make sure that the comment is aligned:dnl [ --enable-myext Enable myext support])//去掉dnl
修改头文件php_myext.h:
//PHP_FUNCTION(confirm_myext_compiled); /* For testing, remove later. */
//修改为
PHP_FUNCTION(myext); /* For testing, remove later. */
修改myext.c:
//将
//zend_function_entry myext_functions[] = {
// PHP_FE(confirm_myext_compiled, NULL) /* For testing, remove later. */
// {NULL, NULL, NULL} /* Must be the last line in myext_functions[] */
//};
//修改为
zend_function_entry myext_functions[] = {
PHP_FE(myext, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in myext_functions[] */
};
//在文件底部添加自己的函数
PHP_FUNCTION(myext)
{
zend_printf("Hello World!\n");
}
安装自己的php扩展myext:
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
修改php.ini,添加:
extension = "myext.so"
重启web服务器,查看phpinfo,即可看到自己的扩展:
新建测试php文件:
myext();
执行此文件,即可看到再熟悉不过的“Hello World!”。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用C#編寫布林過濾器演算法布隆過濾器(BloomFilter)是一種空間效率非常高的資料結構,可以用來判斷一個元素是否屬於集合。它的基本思想是透過多個獨立的雜湊函數將元素映射到一個位數組中,並將對應位數組的位元標記為1。當判斷一個元素是否屬於集合時,只需要判斷對應位數組的位是否都為1,如果有任何一位為0,則可以判定元素不在集合中。布隆過濾器具有快速查詢和

查看phpinfo()函數輸出、使用命令列工具和檢查PHP設定檔均可以查看php用了哪些擴充功能。 1.查看phpinfo()函數輸出,創建一個簡單的PHP腳本,將這個腳本保存為phpinfo.php,並將其上傳到您的網頁伺服器,在瀏覽器中存取此文件,使用瀏覽器的搜尋功能,在頁面中尋找關鍵字"extension"或"extension_loaded",以找到有關擴充功能的資訊即可。

如何使用PHP擴充PDO連接Oracle資料庫導語:PHP是一種非常流行的伺服器端程式語言,而Oracle是一款常用的關係型資料庫管理系統。本文將介紹如何使用PHP擴充PDO(PHPDataObjects)來連接Oracle資料庫。一、安裝PDO_OCI擴充要連接Oracle資料庫,首先需要安裝PDO_OCI擴充。以下是安裝PDO_OCI擴充的步驟:確保

如何在C語言中編寫乘方函數乘方(exponentiation)是數學中常用的運算,表示將一個數自乘若干次的操作。在C語言中,我們可以透過寫一個乘方函數來實現這個函數。以下將詳細介紹如何在C語言中編寫乘方函數,並給出具體的程式碼範例。確定函數的輸入和輸出乘方函數的輸入通常包含兩個參數:底數(base)和指數(exponent),輸出為計算得到的結果。因此,我們

飯店預訂系統是一種重要的資訊管理系統,它可以幫助飯店實現更有效率的管理和更良好的服務。如果你想學習如何使用C++來編寫一個簡單的飯店預訂系統,那麼這篇文章將為您提供一個基本的框架和詳細的實作步驟。飯店預訂系統的功能需求在開發飯店預訂系統之前,我們需要確定其實現的功能需求。一個基本的飯店預訂系統至少需要實現以下幾個功能:(1)客房資訊管理:包括客房類型、房間號碼、房

如何使用PHP擴充SuiteCRM的報告產生功能SuiteCRM是一款功能強大的開源CRM系統,它提供了豐富的功能來幫助企業管理客戶關係。其中一個重要的功能是報告生成,使用報告可以幫助企業更了解業務狀況,並做出正確的決策。本文將介紹如何使用PHP擴充SuiteCRM的報告產生功能,並提供相關的程式碼範例。在開始之前,需要確保已經安裝好了SuiteCRM,

如何透過C++寫一個簡單的掃雷遊戲?掃雷遊戲是一款經典的益智類遊戲,它要求玩家根據已知的雷區佈局,在沒有踩到地雷的情況下,揭示所有的方塊。在這篇文章中,我們將介紹如何使用C++來寫一個簡單的掃雷遊戲。首先,我們需要定義一個二維陣列來表示掃雷遊戲的地圖。數組中的每個元素可以是一個結構體,用於儲存方塊的狀態,例如是否揭示、是否有雷等資訊。另外,我們還需要定義

如何使用C++寫一個簡單的學生選課系統?隨著科技的不斷發展,電腦程式設計成為了一種必備的技能。而在學習程式設計的過程中,一個簡單的學生選課系統可以幫助我們更好地理解和應用程式語言。在本文中,我們將介紹如何使用C++來寫一個簡單的學生選課系統。首先,我們需要先明確這個選課系統的功能和需求。一個基本的學生選課系統通常包含以下幾個部分:學生資訊管理、課程資訊管理、選
