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

資訊專欄INFORMATION COLUMN

5分鐘PHP擴展開發快速入門

RobinTang / 435人閱讀

摘要:簡單點,先來實現一個擴展的。接下來我們將使用它來生成我們的擴展的基本骨架。注意不要添加任何分號。有興趣的同學可以自行研究一下靜態編譯是什么鬼在擴展目錄中執行命令。一定要在擴展的目錄執行才有效,否則將得到一個錯誤提示。

簡單點,先來實現一個PHP擴展的hello world。
注意,以下所有操作都是基于linux系統(推薦centos和ubuntu, Mac系統應該類似 ),PHP5.5以上,建議讀者使用5.5以上版本測試本文例程,PHP內核是由C語言寫成的,所以擴展基本也是用C/C++編寫。
話不多說,請睇下面:

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

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

二、生成擴展的基本骨架

在ext目錄執行命令:

./ext_skel --extname=foobar

如果在此目錄沒有寫權限請自覺加sudo。命令執行完畢后輸出:

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擴展的基本骨架,在當前目錄生成了一個foobar的文件夾,我們擴展的所有代碼都將放在此目錄下(使用了第三方的庫的擴展另當別論)。先別著急弄懂上面提示的內容,以后你會知道的,就像小時候媽媽經常跟你說:等你長大了就懂了!

三、編輯config.m4文件

ls擴展目錄foobar,發現里面有幾個文件:

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

用VIM打開擴展目錄下的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])

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

四、編輯php_foobar.h文件:聲明一個函數

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

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

這上ext_skel工具生成擴展骨架的時候自動聲明的一個函數,僅用于測試,你可以去掉,也可以保留!在這一行的下面添加一行:

48 PHP_FUNCTION(halo);

這就聲明了一個名為halo的PHP空間的函數,在PHP的代碼里就可以像普通函數一樣調用它。當然,目前到這一步還不行,因為這里只是聲明,還沒有定義它的行為。我們將在foobar.c文件中編寫它的函數體。

四、編輯foobar.c文件:定義函數體

foobar.c是擴展主要實現的地方,找到下面幾行:

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)。注意不要添加任何分號。如下:

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空間注冊一個函數,名字就是剛才在php_foobar.h文件聲明的halo

接下來是真正編寫halo函數實現的時候。
在文件末尾添加以下代碼:

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

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

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

OK!編碼完畢,下面就是把擴展編譯進PHP,供PHP代碼調用!

五、編譯安裝擴展

擴展編譯分動態編譯和靜態編譯兩種方法!今天我們先討論動態編譯。有興趣的同學可以自行研究一下靜態編譯是什么鬼!

在擴展目錄中執行phpize命令。一定要在擴展的目錄執行才有效,否則將得到一個錯誤提示。

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

phpize命令的正常輸出如下:

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

它表明的是當前使用的PHP內核的版本。

執行完phpize命令,細心的你會發現擴展目錄下多出了好多文件,我的意見是不用管這些文件是干嘛用的,當然有興趣也可以研究一下!

下一步就是configure,詳細命令如下:

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

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

configure之后又多了好多文件,再一次無視它們吧!命令輸出好長的一陀東西。

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

順利make完之后,會在擴展的目錄下的modules子目錄多了一個foobar.so的文件,
它就是我們剛才編寫的擴展的最終產物。聰明的你一定已經想到:這TM不就是個動態庫嗎?而我只能說:你說對了!動態編譯產生的是動態庫文件。

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

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

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

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

extension=foobar.so

至此,一個簡單的PHP擴展就完成了。是不是有點小激動?

下面驗證一番,在WEB目錄新建一個php文件,如info.php,寫入如下代碼:


地球人都知道這個函數調用是做什么的吧?

在瀏覽器執行這個文件!看到以下輸出就說明擴展安裝成功了:

直接修改info.php文件吧,調用我們剛才在擴展中定義的函數:


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

hello world!

BingGo!
如果你覺得這文章不錯,請給我點個贊吧^_^!

六、擴展閱讀

PHP擴展開發及內核應用

TIPI項目

longmon@github

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/22293.html

相關文章

  • 3分鐘快速入門URLOS應用開發

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

    Bmob 評論0 收藏0
  • AI開發書籍分享

    摘要:編程書籍的整理和收集最近一直在學習深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后也找了很多的書和文章,隨著不斷的學習,也整理了下自己的學習筆記準備分享出來給大家后續的文章和總結會繼續分享,先分享一部分的 編程書籍的整理和收集 最近一直在學習deep learning深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后...

    huayeluoliuhen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<