1. 程式人生 > >php擴充套件開發(一 基本介紹和擴充套件開發的基本步驟)

php擴充套件開發(一 基本介紹和擴充套件開發的基本步驟)

需要開發擴充套件的場景:

1)應用非常注重效率,如複雜的影象演算法,需要編寫成擴充套件模組

2)有些系統呼叫不能用PHP直接訪問,比如Linux下的fork函式建立一個程序,需要編寫擴充套件

3)需要商業化一個應用,又不想暴露原始碼

一,搭建PHP框架

1  先了解下PHP的源目錄吧

    ext:存放動態和內建模組的目錄,在這裡可以找到所有的官方擴充套件,以後也會在這裡放新的擴充套件

   main:包含PHP的主要的巨集定義

   pear:PHP的擴充套件與應用庫目錄,包含pear的核心檔案

   sapi:包含不同伺服器抽象層的程式碼

   TSRM:zned和php的執行緒安全資源管理器目錄

   zend:包含zend引擎的所有檔案,可以找到所有Zend  API的定義

 除了上邊的檔案目錄,一般還會包括下邊幾個檔案進來:

   main/php.h : 位於main目錄下,包含絕大部分的PHP巨集以及PHP  API的定義

   Zend/zend.h : 位於Zend目錄下包含絕大部分的zend巨集和Zend API的定義

   Zend/zend_API.h : 位於zend目錄下,包含Zend API的定義

2 ext_skel工具:

在ext的原始碼目錄下,有ext_skel和ext_skel_win32.h兩個自動化構建擴充套件開發的框架工具,前者在Linux下使用,後者在win下使用

win下擴充套件開發的介紹:

1)使用ext_skel工具編寫擴充套件

    a) cd到PHP原始碼目錄的ext目錄下,輸入以下命令擴充套件框架:

          php ext_skel_win32.php   --extname = myext (如果提示php不是內部或者外部命令,也不是可執行的程式或批處理檔案,請先安裝PHP,並且新增php到環境變數中)

b)安裝成功之後會發現ext目錄下多了一個myext目錄,myext目錄中,myext.dsp是VC++的工程檔案

c)編譯安裝擴充套件

         用VC++開啟myext.dsp工程檔案,按編譯按鈕開始編譯這個擴充套件,在編譯的過程中,會發現編譯出錯提示:link fatal error:can'tfind input files  "php5ts.lib",從PHP的安裝目錄下(注意不是php的原始碼目錄,是安裝目錄)的dev目錄中把php5ts.lib複製到建立的擴充套件目錄(myext)目錄下,再次按編譯按鈕,這次可以成功編譯

d)編譯成之後原始碼的根目錄會多出一個Release_TS目錄,在該目錄中有剛剛編譯好的動態擴充套件檔案 php_myext.dll,如果找不到Release_TS目錄,而找到了debug_TS目錄,請把VC++的編譯模式改成release模式

到此已經編譯出了一個PHP擴充套件檔案,只要把編譯出的php_myext.dll放到安裝目錄的ext目錄下,在php.ini中新增extension = php_myext.dll 並重啟web伺服器就可以了,安裝完成之後就可以像其它擴充套件一樣在phpinfo裡看到擴充套件資訊了,可以呼叫一下擴充套件封裝的函式來確認是否安裝成功

Linux下擴充套件開發的介紹(以ubutun系統為例):

      a)安裝php-dev包

      使用php-dev包中的phpize工具可以減少很多繁瑣的步驟,如果用php原始碼編譯的話,就可以不用安裝php-dev包,原始碼中已經飽和phpize工具,在ubutun下安裝dev包的命令是 sudo  spt-get install  php5-dev安裝完成後,可以使用以下命令檢視是否安裝成功 phpize --version,如果顯示phpize的版本資訊就證明安裝成功

    b)使用ext_skel工具,在php的原始碼目錄下有個ext_Skel檔案,用法與win下的ext_skel_win32.h類似

eg:建立一個php擴充套件 

./ext_skel  --extname=myext  然後,可以看到一系列的提示步驟

c)編譯安裝擴充套件

在生成擴充套件之後,進入到擴充套件目錄,使用phpize命令生成擴充套件的配置工具,然後編譯和安裝:

cd myext

phpize

./configure  --with-php-config = /usr/local/php5/bin/php-config

make

maketest

make install

編譯完成後可以在 /usr/local/php5/lib/php/extensions/no_debug_non_.../下看到生成的擴充套件檔案myext.so

然後在phpini檔案中新增擴充套件資訊  extension = myext.so

d)使用 php -m | grep myext 檢視擴充套件是否安裝成功