PHP擴(kuò)展開發(fā)入門教程_PHP教程
推薦:分享一則PHP定義函數(shù)代碼這篇文章主要介紹了分享一則PHP定義函數(shù)代碼,主要是讓大家熟悉下php的語法格式以及php中插入HTML代碼的方式,希望能夠給到大家一些幫助。 先貼代碼 代碼如下: ?php function table(){ echo table align='center' border='1' width='600' cellspacing='0';; echo capti
這篇文章主要介紹了PHP擴(kuò)展開發(fā)入門教程,本文講解了使用C語言在Linux系統(tǒng)下開發(fā)一個(gè)PHP擴(kuò)展應(yīng)該具備的最基本知識(shí),需要的朋友可以參考下
PHP擴(kuò)展開發(fā)
我準(zhǔn)備在此系列博文中總結(jié)我有關(guān)PHP擴(kuò)展開發(fā)的學(xué)習(xí)和感悟,力圖簡單清晰地描述在Linux系統(tǒng)下開發(fā)一個(gè)PHP擴(kuò)展應(yīng)該具備的最基本知識(shí)。水平較低,難免有錯(cuò)誤,望指出。
準(zhǔn)備工作
首先要獲取一份PHP源碼(可以從Github上簽出,或者到官網(wǎng)上下載最新的穩(wěn)定版),然后編譯之。為了加快編譯速度,我們推薦禁用所有額外的擴(kuò)展(使用--disable-all選項(xiàng)),但最好打開debug(使用--enable-debug選項(xiàng))和線程安全(使用--enable-maintainer-zts),但要在發(fā)布擴(kuò)展的時(shí)候關(guān)閉debug,視情況選擇是否需要打開線程安全:
代碼如下:$ ./buildconf --force
$ ./configure --disable-all --enable-debug --enable-maintainer-zts
$ make
注意,我們沒有指定--prefix選項(xiàng)(同時(shí)也沒有make install),因?yàn)檫@不是必須的。注意查看輸出信息,也許你需要安裝一些依賴包才能成功編譯PHP。
編譯后的PHP的可執(zhí)行程序在源碼的sapi目錄下,對(duì)應(yīng)不同的宿主環(huán)境有不同的子目錄,我們以后都主要使用cli(command line interface)環(huán)境,可以建一個(gè)別名方便引用:
代碼如下:$ alias php-dev=/usr/local/src/php-5.6.5/sapi/cli/php
有一些命令行選項(xiàng)是很有用的:
代碼如下:php-dev -h # 打印幫助信息
php-dev -v # 打印版本信息
php-dev --ini # 打印配置信息
php-dev -m # 打印加載的模塊信息
php-dev -i # phpinfo
php-dev -r <code> # 執(zhí)行code里的代碼
擴(kuò)展骨架
PHP的所有官方擴(kuò)展都在源碼的ext目錄下,我們自己寫的擴(kuò)展也可以放在該目錄下。注意,該目錄下有個(gè)名為ext_skel的shell腳本,它是用來生成PHP擴(kuò)展骨架的,使用該腳本,可以幫我們快速創(chuàng)建PHP擴(kuò)展:
代碼如下:$ ./ext_skel --extname=myext
上面的命令幫我們創(chuàng)建了一個(gè)名為myext的擴(kuò)展,源碼在myext目錄下。不帶任何參數(shù)的執(zhí)行該腳本可以打印幫助信息,這樣你可以查看到該腳本提供的更多選項(xiàng)。
接下來讓我們完成我們的擴(kuò)展。進(jìn)入myext目錄,編輯config.m4配置文件,找到PHP_ARG_ENABLE宏函數(shù),去掉前面的dnl注釋(共三行)。退回到源碼根目錄,重新執(zhí)行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打印了我們擴(kuò)展的加載情況,如果看不到下面的輸出,則說明我們的擴(kuò)展沒有配置成功,回頭檢查下config.m4文件。
這次編譯應(yīng)該非常快,因?yàn)榇蟛糠执a都已經(jīng)編譯過了。PHP還有另外一種編譯擴(kuò)展的方法(使用動(dòng)態(tài)連接的方式,將擴(kuò)展編譯為.so的文件),不過我們推薦在開發(fā)擴(kuò)展的時(shí)候使用靜態(tài)編譯,因?yàn)檫@樣省去了在配置文件中加載擴(kuò)展的步驟。
一切順利的話,我們的第一個(gè)擴(kuò)展就已經(jīng)可以執(zhí)行了:
代碼如下:$ 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.
第一個(gè)命令顯示了我們的擴(kuò)展已經(jīng)被加載。第二個(gè)命令執(zhí)行了ext_skel擴(kuò)展骨架自動(dòng)為我們創(chuàng)建的函數(shù)。當(dāng)然,這個(gè)函數(shù)毫無意義,不過我們可以很容易的把這個(gè)函數(shù)改編成hello world。
手動(dòng)創(chuàng)建擴(kuò)展
大部分教程都是以ext_skel擴(kuò)展骨架為原型講述擴(kuò)展開發(fā)的,這種做法當(dāng)然很方便快捷。但是我個(gè)人更喜歡純手工開發(fā)擴(kuò)展的方式,因?yàn)檫@樣更容易理解其中的每一個(gè)細(xì)節(jié)。
手動(dòng)創(chuàng)建擴(kuò)展,先進(jìn)入ext目錄,創(chuàng)建我們的擴(kuò)展目錄myext2。有幾個(gè)文件是必須的: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其實(shí)是autoconf程序使用的配置文件,autoconf是autotools工具箱里重要的組成。完整介紹autoconf的用法是需要很長時(shí)間的,好在我們這里的用法非常簡單。
PHP_ARG_ENABLE是PHP為autoconf定義的宏函數(shù),myext2是它的第一個(gè)參數(shù),指出了擴(kuò)展的名字;后面兩個(gè)參數(shù)只是在make和configure執(zhí)行時(shí)用來顯示的,所以我們可以隨便寫。[ ]在autoconf語法中的作用類似于雙引號(hào),用來包裹字符串(注意第二個(gè)參數(shù)中包含了空格,但是可以不用方括號(hào)起來)。還有第四個(gè)參數(shù)用來指明擴(kuò)展默認(rèn)是開啟還是關(guān)閉(yes或no),默認(rèn)是no。
下面三行其實(shí)就是shell語法,判斷我們是否開啟了PHP_MYEXT2擴(kuò)展模塊。如果開啟了該擴(kuò)展模塊(--enable-myext2),則$PHP_MYEXT2變量的值不為no,因此執(zhí)行PHP_NEW_EXTENSION宏。這個(gè)宏函數(shù)也是PHP為autoconf定義的擴(kuò)展語法,第一個(gè)參數(shù)同樣是擴(kuò)展名稱;第二個(gè)參數(shù)是擴(kuò)展要編譯的C文件,如果有多個(gè),依次寫下去就可以了(空格分隔);第三個(gè)參數(shù)固定是$ext_shared。
接下來編寫php_myext2.h頭文件,該文件的命名是PHP擴(kuò)展的規(guī)范 — php_擴(kuò)展名.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簡單分頁類實(shí)現(xiàn)方法這篇文章主要介紹了php簡單分頁類實(shí)現(xiàn)方法,實(shí)例分析了php分頁類的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下 本文實(shí)例講述了php簡單分頁類實(shí)現(xiàn)方法。分享給大家供大家參考。具體如下: 代碼如下:class PageModel { /** * 獲取分頁數(shù)組 * @param unknown $pag
- 分享一則PHP定義函數(shù)代碼
- php簡單分頁類實(shí)現(xiàn)方法
- PHP刪除指定目錄中的所有目錄及文件的方法
- PHP獲取文件相對(duì)路徑的方法
- CentOS安裝php v8js教程
- PHP實(shí)現(xiàn)一維數(shù)組轉(zhuǎn)二維數(shù)組的方法
- php設(shè)計(jì)模式之單例模式實(shí)例分析
- PHP中字符安全過濾函數(shù)使用小結(jié)
- PHP 魔術(shù)變量和魔術(shù)函數(shù)詳解
- php短址轉(zhuǎn)換實(shí)現(xiàn)方法
- php中mysql連接方式PDO使用詳解
- php中數(shù)據(jù)庫連接方式pdo和mysqli對(duì)比分析
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- php 深入理解strtotime函數(shù)的使用詳解
- 用Suhosin加強(qiáng)PHP腳本語言安全性
- 基于PHP MySQL的聊天室設(shè)計(jì)
- PHP使用zlib擴(kuò)展實(shí)現(xiàn)頁面GZIP壓縮輸出
- PHP初學(xué):實(shí)例詳細(xì)學(xué)習(xí)PHP的簡單語法
- PHP中使用file_get_contents post數(shù)據(jù)代碼例子
- PHP:避免重復(fù)提交和檢查數(shù)據(jù)來路
- 揭秘PHP程序設(shè)置變量的方法
- php中判斷文件空目錄是否有讀寫權(quán)限
- PHP初學(xué)者頭疼問題總結(jié)
- 相關(guān)鏈接:
- 教程說明:
PHP教程-PHP擴(kuò)展開發(fā)入門教程
。