PHP C擴展初探

說明

環境:

 ubuntu14.4 
 php5.5.9 通過apt-get 安裝

因爲不同於編譯安裝的php,需要重新下載php源碼進行擴展。

$ sudo apt-get source php5 

保存目錄可自定義
打開源碼文件進入到ext中,這裏是存放擴展的地方,我們可以看到有 許多官方的擴展
這裏可以科普一下php源碼的主要目錄以及功能
./main包含PHP主要宏定義
./pear 包含PEAR核心文件
./sapi 包含不同服務器抽象層代碼
./Zend包含引擎的所有文件
我們要用到php-dev包,編譯安裝下會內置
$sudo apt-get install php5-dev
$phpize-v
驗證安裝是否成功

正式開始擴展

使用ext_skel 這個文件就在ext目錄下
$./ext_skel --extname=newext
很多教程上都是這一句命令,但我在使用過程中發現了會在後續過程中無法找到newext.c文件
查找剛纔的操作,發現會報cannot open /skeleton.c: No such file 原來是找不到skeleton.c 我們可以通過查看ext_skel發現


所以需要指定skel的path
刪除原先newext目錄,重新走一遍
$ ./ext_skel --extname=newext --skel=/usr/lib/php5/skeleton
成功後返回
這裏寫圖片描述

根據提示我們需要更改 /newext2/config.m4 的註釋
這裏寫圖片描述

$cd newext2
$phpize
$./configure --with-php-config=/usr/bin/php-config
$make

在這裏需要注意,如果出現make無規則錯誤 需要查看php-config路徑是否正確
若編譯成功會如下所示
這裏寫圖片描述

$make test 
$make install

接着我們就修改php.ini文件
增加extension = newext2.so
注意cli模式和cgi模式下的php.ini文件是不一樣的,我在剛開始實驗的時候發現cli模式下使用

$usr/bin/php -m

並沒有發現newext2的擴展
後來在cgi下輸出phpinfo卻能看到
後來 在cli下 輸出phpinfo 找到php.ini的路徑作出修改最後成功
控制檯下phpinfo輸出過大可以使用下面方法

$ php phpinfo.php | less

找到路徑後進行更改
這裏寫圖片描述
修改後別忘記restart apache

網上有很多相關的教程,我參考了《PHP和新技術與最佳實踐》第七章和自己在實際操作遇到的問題進行整理總結,特別針對非編譯安裝PHP的情況,主要是注意配置文件的路徑問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章