国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

5分鐘PHP擴(kuò)展開發(fā)快速入門

RobinTang / 426人閱讀

摘要:簡(jiǎn)單點(diǎn),先來實(shí)現(xiàn)一個(gè)擴(kuò)展的。接下來我們將使用它來生成我們的擴(kuò)展的基本骨架。注意不要添加任何分號(hào)。有興趣的同學(xué)可以自行研究一下靜態(tài)編譯是什么鬼在擴(kuò)展目錄中執(zhí)行命令。一定要在擴(kuò)展的目錄執(zhí)行才有效,否則將得到一個(gè)錯(cuò)誤提示。

簡(jiǎn)單點(diǎn),先來實(shí)現(xiàn)一個(gè)PHP擴(kuò)展的hello world。
注意,以下所有操作都是基于linux系統(tǒng)(推薦centos和ubuntu, Mac系統(tǒng)應(yīng)該類似 ),PHP5.5以上,建議讀者使用5.5以上版本測(cè)試本文例程,PHP內(nèi)核是由C語言寫成的,所以擴(kuò)展基本也是用C/C++編寫。
話不多說,請(qǐng)睇下面:

一、下載PHP源碼到本地目錄

解壓后進(jìn)入PHP源碼的ext目錄,在此目錄下有一個(gè)名為ext_skel的shell腳本文件。接下來我們將使用它來生成我們的擴(kuò)展的基本骨架。當(dāng)然,如果你夠牛也可以不用它,直接自己編寫必要的文件。

二、生成擴(kuò)展的基本骨架

在ext目錄執(zhí)行命令:

./ext_skel --extname=foobar

如果在此目錄沒有寫權(quán)限請(qǐng)自覺加sudo。命令執(zhí)行完畢后輸出:

Creating directory foobar
Creating basic files: config.m4 config.w32 .svnignore foobar.c php_foobar.h CREDITS EXPERIMENTAL tests/001.phpt foobar.php [done].

To use your new extension, you will have to execute the following steps:

1.  $ cd ..
2.  $ vi ext/foobar/config.m4
3.  $ ./buildconf
4.  $ ./configure --[with|enable]-foobar
5.  $ make
6.  $ ./sapi/cli/php -f ext/foobar/foobar.php
7.  $ vi ext/foobar/foobar.c
8.  $ make

Repeat steps 3-6 until you are satisfied with ext/foobar/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.

人品好的話將看到上面的輸出,這表示已成功生成名為foobar的PHP擴(kuò)展的基本骨架,在當(dāng)前目錄生成了一個(gè)foobar的文件夾,我們擴(kuò)展的所有代碼都將放在此目錄下(使用了第三方的庫(kù)的擴(kuò)展另當(dāng)別論)。先別著急弄懂上面提示的內(nèi)容,以后你會(huì)知道的,就像小時(shí)候媽媽經(jīng)常跟你說:等你長(zhǎng)大了就懂了!

三、編輯config.m4文件

ls擴(kuò)展目錄foobar,發(fā)現(xiàn)里面有幾個(gè)文件:

config.m4  config.w32  CREDITS  EXPERIMENTAL  foobar.c  foobar.php  php_foobar.h  tests

用VIM打開擴(kuò)展目錄下的config.m4文件,找到下面幾行:

16 dnl PHP_ARG_ENABLE(foobar, whether to enable foobar support,
17 dnl Make sure that the comment is aligned:
18 dnl [  --enable-foobar           Enable foobar support])

前面的數(shù)字是它所在的行數(shù)(下同),不是文件內(nèi)容,去掉16和18行前面dnl字符,dnl注釋開始,我們要把這兩行的注釋符號(hào)去掉,17行不用管。wq保存文件。
config.m4文件其實(shí)有很多內(nèi)容,初始入門教程就不仔細(xì)說明各部分內(nèi)容,因?yàn)閷?shí)在我也不太懂!它的作用是配置擴(kuò)展的行為,比如說明擴(kuò)展編譯選項(xiàng),是否使用第三方庫(kù),擴(kuò)展的源碼組成等等。

四、編輯php_foobar.h文件:聲明一個(gè)函數(shù)

php_foobar.h是一個(gè)C頭文件,我們需要在這個(gè)頭文件里聲明一個(gè)方法
vim編輯php_foobar.h文件,找到下面這一行:

47 PHP_FUNCTION(confirm_foobar_compiled);  /* For testing, remove later. */

這上ext_skel工具生成擴(kuò)展骨架的時(shí)候自動(dòng)聲明的一個(gè)函數(shù),僅用于測(cè)試,你可以去掉,也可以保留!在這一行的下面添加一行:

48 PHP_FUNCTION(halo);

這就聲明了一個(gè)名為halo的PHP空間的函數(shù),在PHP的代碼里就可以像普通函數(shù)一樣調(diào)用它。當(dāng)然,目前到這一步還不行,因?yàn)檫@里只是聲明,還沒有定義它的行為。我們將在foobar.c文件中編寫它的函數(shù)體。

四、編輯foobar.c文件:定義函數(shù)體

foobar.c是擴(kuò)展主要實(shí)現(xiàn)的地方,找到下面幾行:

41 const zend_function_entry foobar_functions[] = {
42     PHP_FE(confirm_foobar_compiled, NULL)       /* For testing, remove later. */
43     PHP_FE_END  /* Must be the last line in foobar_functions[] */
44 };

在42行下面添加PHP_FE(halo, NULL)。注意不要添加任何分號(hào)。如下:

41 const zend_function_entry foobar_functions[] = {
42     PHP_FE(confirm_foobar_compiled, NULL)       /* For testing, remove later. */
43     PHP_FE(halo, NULL)
44     PHP_FE_END  /* Must be the last line in foobar_functions[] */
45 };

這一步是向PHP空間注冊(cè)一個(gè)函數(shù),名字就是剛才在php_foobar.h文件聲明的halo。

接下來是真正編寫halo函數(shù)實(shí)現(xiàn)的時(shí)候。
在文件末尾添加以下代碼:

169 PHP_FUNCTION(halo){
170     php_printf("hello world!");
171 }

從代碼看出:halo函數(shù)只是打印一串字符串hello world,不做其他任何事情。

foobar.c文件內(nèi)容很多,每個(gè)代碼段都有相應(yīng)的注釋說明,仔細(xì)研究一下,應(yīng)該還是大概能懂是什么意思!如果看不明白也沒關(guān)系,還是媽媽那句話:等你長(zhǎng)大(看多)了就懂了

OK!編碼完畢,下面就是把擴(kuò)展編譯進(jìn)PHP,供PHP代碼調(diào)用!

五、編譯安裝擴(kuò)展

擴(kuò)展編譯分動(dòng)態(tài)編譯和靜態(tài)編譯兩種方法!今天我們先討論動(dòng)態(tài)編譯。有興趣的同學(xué)可以自行研究一下靜態(tài)編譯是什么鬼!

在擴(kuò)展目錄中執(zhí)行phpize命令。一定要在擴(kuò)展的目錄執(zhí)行才有效,否則將得到一個(gè)錯(cuò)誤提示。

如果提示沒有找到命令,請(qǐng)檢查系統(tǒng)沒有安裝php-dev工具集,如果是源碼編譯安裝的PHP,一般在php的bin目錄下面,如果通過yumapt安裝的PHP請(qǐng)確認(rèn)是否安裝過php-dev或者php-devel,安裝過的話應(yīng)該直接就能運(yùn)行phpize命令。也可通過find / -name phpize命令來找到phpize的路徑,然后帶路徑執(zhí)行,如果系統(tǒng)安裝了多個(gè)版本的PHP,最好是指定路徑的phpize來指定使用的PHP版本!還找不到的話就GOOGLE一下吧!

phpize命令的正常輸出如下:

Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212

它表明的是當(dāng)前使用的PHP內(nèi)核的版本。

執(zhí)行完phpize命令,細(xì)心的你會(huì)發(fā)現(xiàn)擴(kuò)展目錄下多出了好多文件,我的意見是不用管這些文件是干嘛用的,當(dāng)然有興趣也可以研究一下!

下一步就是configure,詳細(xì)命令如下:

./configure --enable-foobar --with-config-path=/usr/local/php/bin/php-config

configure需要兩個(gè)選項(xiàng):--enable-foobar表示啟用這個(gè)擴(kuò)展; --with-config-path=/usr/local/php/bin/php-config, 指定了php-config的路徑,一般源碼編譯安裝的PHP和多版本環(huán)境都需要指定這個(gè)選項(xiàng),aptyum安裝的都是在默認(rèn)路徑,可以不特別指定。

configure之后又多了好多文件,再一次無視它們吧!命令輸出好長(zhǎng)的一陀?xùn)|西。

configure完之后就是make了。
什么?command not found?先安裝gccmake吧! 方法請(qǐng)Google!

順利make完之后,會(huì)在擴(kuò)展的目錄下的modules子目錄多了一個(gè)foobar.so的文件,
它就是我們剛才編寫的擴(kuò)展的最終產(chǎn)物。聰明的你一定已經(jīng)想到:這TM不就是個(gè)動(dòng)態(tài)庫(kù)嗎?而我只能說:你說對(duì)了!動(dòng)態(tài)編譯產(chǎn)生的是動(dòng)態(tài)庫(kù)文件。

OK,擴(kuò)展編譯完了,需要在PHP中使用擴(kuò)展,復(fù)制foobar.so的完整路徑,vim打開PHP的配置文件php.ini,在文件的末尾加入以下內(nèi)容:

extension=/root/php-5.5.38/ext/foobar/modules/foobar.so #這是在我的系統(tǒng)foobar.so路徑

保存退出,重啟一下php-fpm(或apache,nginx什么的,如果不確定,就都重啟吧!請(qǐng)不要在生產(chǎn)環(huán)境瞎搞)

有些人就忍不住要問一下了:為什么有些擴(kuò)展在php.ini的配置中不用帶路徑?其實(shí)我們的擴(kuò)展一樣也是可以的。在make命令之后多執(zhí)行一步:make install,如果不是root權(quán)限,請(qǐng)自覺加sudo或切到root用戶下執(zhí)行。擴(kuò)展就會(huì)安裝到相應(yīng)PHP版本的默認(rèn)擴(kuò)展加載路徑!然后在php.ini的配置中就只要簡(jiǎn)單寫上擴(kuò)展名加so即可.

extension=foobar.so

至此,一個(gè)簡(jiǎn)單的PHP擴(kuò)展就完成了。是不是有點(diǎn)小激動(dòng)?

下面驗(yàn)證一番,在WEB目錄新建一個(gè)php文件,如info.php,寫入如下代碼:


地球人都知道這個(gè)函數(shù)調(diào)用是做什么的吧?

在瀏覽器執(zhí)行這個(gè)文件!看到以下輸出就說明擴(kuò)展安裝成功了:

直接修改info.php文件吧,調(diào)用我們剛才在擴(kuò)展中定義的函數(shù):


刷新瀏覽器,如果人品不太壞的話應(yīng)該就能看到以下的輸出:

hello world!

BingGo!
如果你覺得這文章不錯(cuò),請(qǐng)給我點(diǎn)個(gè)贊吧^_^!

六、擴(kuò)展閱讀

PHP擴(kuò)展開發(fā)及內(nèi)核應(yīng)用

TIPI項(xiàng)目

longmon@github

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22293.html

相關(guān)文章

  • 3分鐘快速入門URLOS應(yīng)用開發(fā)

    摘要:教你三分鐘快速制作應(yīng)用開發(fā)功能正式對(duì)外開放了,很多小伙伴們已經(jīng)躍躍欲試,想嘗試著去制作自己的應(yīng)用,這里我教大家快速制作應(yīng)用的方法,那就是通過復(fù)制應(yīng)用功能,三分鐘就能制作出來一個(gè)可安裝運(yùn)行的應(yīng)用。 教你三分鐘快速制作URLOS應(yīng)用 URLOS開發(fā)功能正式對(duì)外開放了,很多小伙伴們已經(jīng)躍躍欲試,想嘗試著去制作自己的應(yīng)用,這里我教大家快速制作應(yīng)用的方法,那就是通過復(fù)制應(yīng)用功能,三分鐘就能制作出...

    Bmob 評(píng)論0 收藏0
  • AI開發(fā)書籍分享

    摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來給大家后續(xù)的文章和總結(jié)會(huì)繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...

    huayeluoliuhen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<