PHP擴展開發入門教程_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:分享一則PHP定義函數代碼
      這篇文章主要介紹了分享一則PHP定義函數代碼,主要是讓大家熟悉下php的語法格式以及php中插入HTML代碼的方式,希望能夠給到大家一些幫助。 先貼代碼 代碼如下: ?php function table(){ echo table align='center' border='1' width='600' cellspacing='0';; echo capti

       這篇文章主要介紹了PHP擴展開發入門教程,本文講解了使用C語言在Linux系統下開發一個PHP擴展應該具備的最基本知識,需要的朋友可以參考下

         

      PHP擴展開發

      我準備在此系列博文中總結我有關PHP擴展開發的學習和感悟,力圖簡單清晰地描述在Linux系統下開發一個PHP擴展應該具備的最基本知識。水平較低,難免有錯誤,望指出。

      準備工作

      首先要獲取一份PHP源碼(可以從Github上簽出,或者到官網上下載最新的穩定版),然后編譯之。為了加快編譯速度,我們推薦禁用所有額外的擴展(使用--disable-all選項),但最好打開debug(使用--enable-debug選項)和線程安全(使用--enable-maintainer-zts),但要在發布擴展的時候關閉debug,視情況選擇是否需要打開線程安全:

      代碼如下:
      $ ./buildconf --force
      $ ./configure --disable-all --enable-debug --enable-maintainer-zts
      $ make
      注意,我們沒有指定--prefix選項(同時也沒有make install),因為這不是必須的。注意查看輸出信息,也許你需要安裝一些依賴包才能成功編譯PHP。

       

      編譯后的PHP的可執行程序在源碼的sapi目錄下,對應不同的宿主環境有不同的子目錄,我們以后都主要使用cli(command line interface)環境,可以建一個別名方便引用:

      代碼如下:
      $ alias php-dev=/usr/local/src/php-5.6.5/sapi/cli/php

       

      有一些命令行選項是很有用的:

      代碼如下:
      php-dev -h          # 打印幫助信息
      php-dev -v          # 打印版本信息
      php-dev --ini        # 打印配置信息
      php-dev -m          # 打印加載的模塊信息
      php-dev -i          # phpinfo
      php-dev -r <code>      # 執行code里的代碼

       

      擴展骨架

      PHP的所有官方擴展都在源碼的ext目錄下,我們自己寫的擴展也可以放在該目錄下。注意,該目錄下有個名為ext_skel的shell腳本,它是用來生成PHP擴展骨架的,使用該腳本,可以幫我們快速創建PHP擴展:

      代碼如下:
      $ ./ext_skel --extname=myext
      上面的命令幫我們創建了一個名為myext的擴展,源碼在myext目錄下。不帶任何參數的執行該腳本可以打印幫助信息,這樣你可以查看到該腳本提供的更多選項。

       

      接下來讓我們完成我們的擴展。進入myext目錄,編輯config.m4配置文件,找到PHP_ARG_ENABLE宏函數,去掉前面的dnl注釋(共三行)。退回到源碼根目錄,重新執行buildconf、configure和make命令:

      代碼如下:
      $ ./buildconf --force
      $ ./configure --help | grep myext
      --enable-myext Enable myext support
      $ ./configure --disable-all --enable-myext --enable-debug --enable-maintainer-zts
      $ make

       

      注意,我們用./configure --help | grep myext打印了我們擴展的加載情況,如果看不到下面的輸出,則說明我們的擴展沒有配置成功,回頭檢查下config.m4文件。

      這次編譯應該非常快,因為大部分代碼都已經編譯過了。PHP還有另外一種編譯擴展的方法(使用動態連接的方式,將擴展編譯為.so的文件),不過我們推薦在開發擴展的時候使用靜態編譯,因為這樣省去了在配置文件中加載擴展的步驟。

      一切順利的話,我們的第一個擴展就已經可以執行了:

      代碼如下:
      $ php-dev -m | grep myext
      myext
      $ php-dev -r 'echo confirm_myext_compiled("myext") . "\n";'
      Congratulations! You have successfully modified ext/myext/config.m4. Module myext is now compiled into PHP.
      第一個命令顯示了我們的擴展已經被加載。第二個命令執行了ext_skel擴展骨架自動為我們創建的函數。當然,這個函數毫無意義,不過我們可以很容易的把這個函數改編成hello world。

       

      手動創建擴展

      大部分教程都是以ext_skel擴展骨架為原型講述擴展開發的,這種做法當然很方便快捷。但是我個人更喜歡純手工開發擴展的方式,因為這樣更容易理解其中的每一個細節。

      手動創建擴展,先進入ext目錄,創建我們的擴展目錄myext2。有幾個文件是必須的:config.m4,myext2.c和php_myext2.h。

      首先,我們來編寫配置文件config.m4:

      代碼如下:
      PHP_ARG_ENABLE(myext2, whether to enable myext2 support,
      [ --enable-myext2 Enable myext2 support])

       

      if test "PHP_MYEXT2" != "no"; then
      PHP_NEW_EXTENSION(myext2, myext2.c, $ext_shared)
      fi


      config.m4其實是autoconf程序使用的配置文件,autoconf是autotools工具箱里重要的組成。完整介紹autoconf的用法是需要很長時間的,好在我們這里的用法非常簡單。

       

      PHP_ARG_ENABLE是PHP為autoconf定義的宏函數,myext2是它的第一個參數,指出了擴展的名字;后面兩個參數只是在make和configure執行時用來顯示的,所以我們可以隨便寫。[ ]在autoconf語法中的作用類似于雙引號,用來包裹字符串(注意第二個參數中包含了空格,但是可以不用方括號起來)。還有第四個參數用來指明擴展默認是開啟還是關閉(yes或no),默認是no。

      下面三行其實就是shell語法,判斷我們是否開啟了PHP_MYEXT2擴展模塊。如果開啟了該擴展模塊(--enable-myext2),則$PHP_MYEXT2變量的值不為no,因此執行PHP_NEW_EXTENSION宏。這個宏函數也是PHP為autoconf定義的擴展語法,第一個參數同樣是擴展名稱;第二個參數是擴展要編譯的C文件,如果有多個,依次寫下去就可以了(空格分隔);第三個參數固定是$ext_shared。

      接下來編寫php_myext2.h頭文件,該文件的命名是PHP擴展的規范 — php_擴展名.h:

      代碼如下:
      #ifndef PHP_MYEXT2_H
      #define PHP_MYEXT2_H

       

      extern zend_module_entry myext2_module_entry;
      #define phpext_myext2_ptr &myext2_module_entry

      #define PHP_MYEXT2_VERSION "0.1.0"

      /* prototypes */
      PHP_FUNCTION(hello);

      #endif /* PHP_MYEXT2_H */

       

      分享:php簡單分頁類實現方法
      這篇文章主要介紹了php簡單分頁類實現方法,實例分析了php分頁類的實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下 本文實例講述了php簡單分頁類實現方法。分享給大家供大家參考。具體如下: 代碼如下:class PageModel { /** * 獲取分頁數組 * @param unknown $pag

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:PHP教程/更新時間:2015-02-27
      相關PHP教程