摘要:二下載第一個(gè)擴(kuò)展第一個(gè)擴(kuò)展的源碼已經(jīng)在上準(zhǔn)備好了,直接用命令克隆,或者手工下載都可以。第四步確認(rèn)擴(kuò)展已經(jīng)安裝成功使用命令可以查看目前已經(jīng)安裝的所有擴(kuò)展。
PHP擴(kuò)展是高級PHP程序員必須了解的技能之一,對于一個(gè)初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個(gè)成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級階段。
本教程系列在linux下面開發(fā)(推薦使用centos),php版本用的是5.6,并假設(shè)您有一定的linux、git操作經(jīng)驗(yàn)和c/c++基礎(chǔ)。
有問題需要溝通的朋友請加QQ技術(shù)交流群32550793和我溝通。
我們使用容易上手的PHP-CPP框架來開發(fā)PHP擴(kuò)展,如果您有一定的linux操作經(jīng)驗(yàn)和c++基礎(chǔ),按照下面的步驟,相信用不了10分鐘就能做出屬于你自己的第一個(gè)擴(kuò)展出來。
以下示范的操作都是在linux centos系統(tǒng)上完成的,并且已經(jīng)事先安裝了php5.6系列。
要想使用PHP-CPP編譯屬于您自己的php擴(kuò)展,需要先下載PHP-CPP的源碼并編譯安裝。
PHP-CPP有兩個(gè)框架源碼,分別叫 PHP-CPP(新版) 和 PHP-CPP-LEGACY。
PHP-CPP(新版)適合開發(fā)PHP-7的擴(kuò)展,PHP-CPP-LEGACY則適合開發(fā)5.X系列的擴(kuò)展,兩套框架的接口一樣,學(xué)會了其中一個(gè)就很容易做出兼容的PHP各版本的擴(kuò)展出來。
下面我們的操作都以PHP-CPP-LEGACY為例。
如果你會git命令,可以直接在終端命令行敲入以下git命令即可。
# git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP-LEGACY.git
如果不會git也沒關(guān)系,可以直接用瀏覽器打開該源碼的github倉庫網(wǎng)址,下載源碼壓縮包并解壓即可,倉庫網(wǎng)址是
https://github.com/CopernicaM...。
下載完成后,進(jìn)入PHP-CPP-LEGACY的源碼目錄,敲入make命令編譯源碼,編譯完成后會生成開發(fā)擴(kuò)展所需要的相關(guān)類庫。
# make
接著運(yùn)行make install命令,把生成的類庫和相關(guān)開發(fā)的頭文件安裝到linux系統(tǒng)里面去,一會兒編譯擴(kuò)展的時(shí)候就可以不用配置頭文件和類庫目錄也能自動連接上了。
# sudo make install二、下載第一個(gè)擴(kuò)展 helloworld
第一個(gè)擴(kuò)展 helloworld 的源碼已經(jīng)在github上準(zhǔn)備好了,直接用git命令克隆,或者手工下載都可以。
# git clone https://github.com/elvisszhang/phpcpp_helloworld.git
進(jìn)入helloworld源碼目錄,打開main.cpp,可以看到如下代碼結(jié)構(gòu),已經(jīng)都給加了中文注釋。
其中最重要的就是 get_module 函數(shù),它是擴(kuò)展的入口函數(shù)。
#include#include //這是PHP里面可以調(diào)用的接口函數(shù) void say_hello() { //輸出一段歡迎 Php::out << "hello world from my first extension" << std::endl; } /** * 告訴編譯器get_module是個(gè)純C函數(shù) */ extern "C" { /** * 本函數(shù)在PHP進(jìn)程一打開就會被訪問,并返回一個(gè)描述擴(kuò)展信息的PHP結(jié)構(gòu)指針 */ PHPCPP_EXPORT void *get_module() { // 必須是static類型,因?yàn)閿U(kuò)展對象需要在PHP進(jìn)程內(nèi)常駐內(nèi)存 static Php::Extension extension("helloworld", "1.0.0"); //這里可以添加你要暴露給PHP調(diào)用的函數(shù) extension.add ("say_hello"); // 返回?cái)U(kuò)展對象指針 return extension; } }
test.php則是擴(kuò)展測試用的一段php代碼。
三、編譯第一個(gè)擴(kuò)展 helloworld編譯這個(gè)擴(kuò)展很簡單,在終端命令行下輸入make命令即可。
# make g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp g++ -shared -o helloworld.so main.o -lphpcpp不出意料的話,就會在源碼目錄下看到 helloworld.so 這個(gè)擴(kuò)展文件了,可以發(fā)現(xiàn)這個(gè)文件很小,才14K而已。
四、安裝第一個(gè)擴(kuò)展 helloworld
不過現(xiàn)在如果你敲一下命令 php -m ,發(fā)現(xiàn)php的模塊中并沒有 helloworld 這個(gè)擴(kuò)展,因?yàn)槲覀冞€沒有把它安裝到php的運(yùn)行環(huán)境里。我們這里暫時(shí)介紹手工安裝擴(kuò)展的方式。
第一步: 先用php-config命令確定一下擴(kuò)展存放的位置
# php-config --extension-dir /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226上面顯示的是我服務(wù)器上擴(kuò)展安裝的位置,各人的服務(wù)器可能配置不一樣。
第二步:然后把 helloworld.so 拷貝到擴(kuò)展存放目錄下。
# cp helloworld.so /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/第三步:修改 php.ini 文件,啟用 helloworld 擴(kuò)展
打開 php.ini文件,加上以下配置項(xiàng),在php.ini的任意地方新加一行即可。
extension = helloworld.so第四步:確認(rèn) helloworld擴(kuò)展已經(jīng)安裝成功
使用php -m命令可以查看php目前已經(jīng)安裝的所有擴(kuò)展。
# php -m | grep helloworld helloworld從上面命令行的響應(yīng)看,helloworld擴(kuò)展已經(jīng)安裝成功了。
第五步:運(yùn)行 test.php 確認(rèn)注冊函數(shù)能使用
還是在擴(kuò)展的源碼目錄,運(yùn)行以下命令
# php test.php hello world from my first extension從上面命令行的響應(yīng)看,我們通過擴(kuò)展向php注冊的say_hello函數(shù)已經(jīng)成功運(yùn)行了,是不是感覺很簡單,但現(xiàn)在的擴(kuò)展只會打個(gè)招呼,還干不了什么正兒八經(jīng)的事,我們后面給他完善一下,讓他能做更多的事情。
參考文獻(xiàn)PHP-CPP安裝以及hello world
PHP-CPP官網(wǎng)教程
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/28524.html
摘要:四使用語言開發(fā)是我重點(diǎn)推薦的擴(kuò)展開發(fā)框架,簡明易懂,功能強(qiáng)大,開發(fā)效率高,代碼易維護(hù),執(zhí)行速度快。優(yōu)點(diǎn)三支持,的擴(kuò)展開發(fā)有兩套擴(kuò)展開發(fā)框架,分別支持,,雖然框架代碼有兩個(gè),但是接口卻是一樣的。 PHP擴(kuò)展是高級PHP程序員必須了解的技能之一,對于一個(gè)初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個(gè)成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級階段。本教程系列...
摘要:更多關(guān)于的技術(shù)文章的擴(kuò)展是用語言編寫,是語言引擎,內(nèi)核。見提供了一種類似的高級語言語法的方式,來自動生成擴(kuò)展的語言代碼,使編寫擴(kuò)展變得非常的簡單。直接修改該文件的代碼,使用原擴(kuò)展的編輯方法也是可以滴。 更多關(guān)于PHP的技術(shù)文章http://www.codefrom.com/ php的擴(kuò)展是用c語言編寫,Zend是語言引擎,PHP內(nèi)核。在實(shí)際編寫php擴(kuò)展的時(shí)候,需要使用大量的...
摘要:簡單點(diǎn),先來實(shí)現(xiàn)一個(gè)擴(kuò)展的。接下來我們將使用它來生成我們的擴(kuò)展的基本骨架。注意不要添加任何分號。有興趣的同學(xué)可以自行研究一下靜態(tài)編譯是什么鬼在擴(kuò)展目錄中執(zhí)行命令。一定要在擴(kuò)展的目錄執(zhí)行才有效,否則將得到一個(gè)錯(cuò)誤提示。 簡單點(diǎn),先來實(shí)現(xiàn)一個(gè)PHP擴(kuò)展的hello world。注意,以下所有操作都是基于linux系統(tǒng)(推薦centos和ubuntu, Mac系統(tǒng)應(yīng)該類似 ),PHP5.5以...
摘要:概述是一個(gè)開源的用于簡化擴(kuò)展的創(chuàng)建和維護(hù)的語言。它使得不擅長的開發(fā)人員也能寫出擴(kuò)展。是縮寫,讀音為。然后我們在里調(diào)用方法正常的話會輸出。至此我們也完成了我們的第一個(gè)擴(kuò)展。 概述 Zephir是一個(gè)開源的用于簡化PHP擴(kuò)展的創(chuàng)建和維護(hù)的語言。它使得不擅長C/C++的PHP開發(fā)人員也能寫出PHP擴(kuò)展。Zephir是Zend Engine/PHP/Intermediate縮寫,讀音為zep...
摘要:下載源代碼要開發(fā)擴(kuò)展,需要先下載的源代碼,一方面是因?yàn)槲覀兊臄U(kuò)展一般會用到自身定義的函數(shù)和宏,另一方面我們可以利用官方提供的工具減少工作量。重點(diǎn)關(guān)注,,即可,最簡單的場景下這三個(gè)文件就是一個(gè)擴(kuò)展的全部組成部分了。 下載PHP源代碼 要開發(fā)PHP擴(kuò)展,需要先下載PHP的源代碼,一方面是因?yàn)槲覀兊臄U(kuò)展一般會用到PHP自身定義的函數(shù)和宏,另一方面我們可以利用官方提供的工具減少工作量。我下載了...
閱讀 2032·2021-11-24 11:16
閱讀 3325·2021-09-10 10:51
閱讀 3333·2021-08-03 14:03
閱讀 1333·2019-08-29 17:03
閱讀 3305·2019-08-29 12:36
閱讀 2332·2019-08-26 14:06
閱讀 555·2019-08-23 16:32
閱讀 2843·2019-08-23 13:42