首頁 >後端開發 >php教程 >PHP擴充開發之 寫第一個擴充 hello world

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

不言
不言原創
2018-04-13 16:16:243376瀏覽

本篇文章給大家分享的內容是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程式碼。

<?php
say_hello();

三、編譯第一個擴充 helloworld

#編譯這個擴充功能很簡單,在終端機指令列下輸入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 這個擴充檔了,可以發現這個檔案很小,才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 helloworld
helloworld

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

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

還是在擴充的原始碼目錄,執行以下指令

# php test.php
hello world from my first extension

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

參考文獻

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

相關推薦:

##PHP擴充開發之相關開發技術比較及介紹

以上是PHP擴充開發之 寫第一個擴充 hello world的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn