PHP擴充開發之 編寫第一個擴充 hello world

來源:互聯網
上載者:User
本篇文章給大家分享的內容是PHP擴充開發之 編寫第一個擴充 hello world ,有著一定的參考價值,有需要的朋友可以參考一下

PHP擴充是進階PHP程式員必須瞭解的技能之一,對於一個初入門的PHP擴充開發人員,怎麼才能開發一個成熟的擴充,進入PHP開發的進階領域呢?本系列開發教程將手把手帶您從入門進入進階階段。
本教程系列在linux下面開發(推薦使用centos),php版本用的是5.6,並假設您有一定的linux、git操作經驗和c/c++基礎。
有問題需要溝通的朋友請加QQ技術交流群32550793和我溝通。

我們使用容易上手的PHP-CPP架構來開發PHP擴充,如果您有一定的linux操作經驗和c++基礎,按照下面的步驟,相信用不了10分鐘就能做出屬於你自己的第一個擴充出來。
以下示範的操作都是在linux centos系統上完成的,並且已經事先安裝了php5.6系列。

一、下載並安裝 PHP-CPP

要想使用PHP-CPP編譯屬於您自己的php擴充,需要先下載PHP-CPP的源碼並編譯安裝。
PHP-CPP有兩個架構源碼,分別叫 PHP-CPP(新版) 和 PHP-CPP-LEGACY。
PHP-CPP(新版)適合開發PHP-7的擴充,PHP-CPP-LEGACY則適合開發5.X系列的擴充,兩套架構的介面一樣,學會了其中一個就很容易做出相容的PHP各版本的擴充出來。
下面我們的操作都以PHP-CPP-LEGACY為例。

如果你會git命令,可以直接在終端命令列敲入以下git命令即可。

# git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP-LEGACY.git

如果不會git也沒關係,可以直接用瀏覽器開啟該源碼的github倉庫網址,下載源碼壓縮包並解壓即可,倉庫網址是
https://github.com/CopernicaM...。

下載完成後,進入PHP-CPP-LEGACY的源碼目錄,敲入make命令編譯源碼,編譯完成後會產生開發擴充所需要的相關類庫。

# make

接著運行make install命令,把產生的類庫和相關開發的標頭檔安裝到linux系統裡面去,一會兒編譯擴充的時候就可以不用配置標頭檔和類庫目錄也能自動連接上了。

# sudo make install

二、下載第一個擴充 helloworld

第一個擴充 helloworld 的源碼已經在github上準備好了,直接用git命令複製,或者手工下載都可以。

# git clone https://github.com/elvisszhang/phpcpp_helloworld.git

進入helloworld源碼目錄,開啟main.cpp,可以看到如下代碼結構,已經都給加了中文注釋。
其中最重要的就是 get_module 函數,它是擴充的入口函數。

#include <phpcpp.h>#include <iostream>//這是PHP裡面可以調用的介面函數void say_hello(){    //輸出一段歡迎    Php::out << "hello world from my first extension" << std::endl;}/** *  告訴編譯器get_module是個純C函數 */extern "C" {        /**     *  本函數在PHP進程一開啟就會被訪問,並返回一個描述擴充資訊的PHP結構指標     */    PHPCPP_EXPORT void *get_module()     {        // 必須是static類型,因為擴充項物件需要在PHP進程內常駐記憶體        static Php::Extension extension("helloworld", "1.0.0");                //這裡可以添加你要暴露給PHP調用的函數        extension.add<say_hello>("say_hello");                // 返回擴充項物件指標        return extension;    }}

test.php則是擴充測試用的一段php代碼。

<?phpsay_hello();

三、編譯第一個擴充 helloworld

編譯這個擴充很簡單,在終端命令列下輸入make命令即可。

# makeg++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cppg++ -shared -o helloworld.so main.o -lphpcpp

不出意料的話,就會在源碼目錄下看到 helloworld.so 這個擴充檔案了,可以發現這個檔案很小,才14K而已。
不過現在如果你敲一下命令 php -m ,發現php的模組中並沒有 helloworld 這個擴充,因為我們還沒有把它安裝到php的運行環境裡。

四、安裝第一個擴充 helloworld

我們這裡暫時介紹手工安裝擴充的方式。

  • 第一步: 先用php-config命令確定一下擴充存放的位置

# php-config --extension-dir/usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226

上面顯示的是我伺服器上擴充安裝的位置,各人的伺服器可能配置不一樣。

  • 第二步:然後把 helloworld.so 拷貝到擴充存放目錄下。

# cp helloworld.so /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/
  • 第三步:修改 php.ini 檔案,啟用 helloworld 擴充

開啟 php.ini檔案,加上以下配置項,在php.ini的任意地方新加一行即可。

extension = helloworld.so
  • 第四步:確認 helloworld擴充已經安裝成功

使用php -m命令可以查看php目前已經安裝的所有擴充。

# php -m | grep helloworldhelloworld

從上面命令列的響應看,helloworld擴充已經安裝成功了。

  • 第五步:運行 test.php 確認註冊函數能使用

還是在擴充的源碼目錄,運行以下命令

# php test.phphello world from my first extension

從上面命令列的響應看,我們通過擴充向php註冊的say_hello函數已經成功運行了,是不是感覺很簡單,但現在的擴充只會打個招呼,還幹不了什麼正兒八經的事,我們後面給他完善一下,讓他能做更多的事情。

參考文獻

PHP-CPP安裝以及hello world
PHP-CPP官網教程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.