PHP擴展開發編譯環境的搭建


PHP允許使用擴展的方式,直接使用C語言開發PHP的功能,由於編譯的問題,很多底層和框架的基礎工作如果用PHP必然會帶來額外的開銷,降低系統的吞吐量,必然yaf就是這樣的思路,把框架封裝在擴展里,讓系統開銷降低到最小,基本接近不用框架的性能水平。

首先是獲取PHP的源代碼,這里提供一個PHP源碼的下載地址,目前最新的是PHP7.1,不夠考慮到我一直在用的環境,這里選擇PHP 5.4.31為例。

第二是在Windows平台下的PHP編譯部署。在Windows下需要用到Visual Studio,PHP 5.4.31用到的是Visual Studio 2008,同時需要升級到vS2008 SP1編譯才能正常編譯使用。否則在部署之后就會出現無法加載的問題。

注意,在此之前,windows需要先安裝php,並把php加入到環境變量中,推薦安裝xampp,一步到位。

VS2008 SP1 :下載地址

PHP 5.4.31源碼:下載地址

PHP5ts.lib:下載地址

安裝完開發環境之后,就可以開始進行配置了。在Windows下開發擴展在創建項目時比在Ubuntu上要麻煩的多,一個是需要PHP的源代碼,還有一個就是配置需要先構建一個項目,然后手動配置,不能像Ubuntu下那么直接執行一個腳本就完事了。將源代碼部署在E:\Projects\php-5.4.45-src路徑下,然后使用管理員身份運行終端(cmd.exe)然后

cd E:\Projects\php-5.4.45-src\ext
php ext_skel_win32.php --extname=hello

 

就可以構建一個PHP擴展的開發項目,(路徑在 E:\Projects\php-5.4.45-src\ext\hello)可以看到如下圖所示的項目文件

利用之前安裝好的VS2008SP1 打開這個項目。可以看到如下內容

右鍵選中項目 打開右鍵菜單-->屬性,如下

點擊C/C++-->常規,找到並打開如下圖紅圈所示

把這是個地址都修改成PHP源碼部署的絕對地址,這樣就不會出現稍微移動一下項目位置就會出現不能編譯的問題,修改后的地址如下

配置好之后,還需要在PHP源碼上做一些設置,

(1)將E:\Projects\php-5.4.45-src\win32\build\config.w32.h.in 拷貝到E:\Projects\php-5.4.45-src\main下,並把最后的.in后綴去掉,否則編譯的時候會出現

找不到..main\config.w32.h文件的錯誤

(2)需要單獨下載php5ts.lib並進行配置,否則會出現

1>LINK : fatal error LNK1181: 無法打開輸入文件“php5ts.lib”

錯誤,將php5ts.lib解壓到E:\Projects\php-5.4.45-src\build,然后打開項目屬性--->鏈接器--->輸入,然后把值改成如下圖標識的樣子。

到此為止,就可以開始編譯項目了。編譯出來的動態庫,通過在php.ini后增加擴展的方式,然后重啟xampp,就可以通過phpinfo()函數看到了。

第三是在Ubuntu平台下的編譯部署,在Ubuntu下開發php擴展要簡單的多,首先一樣先安裝xampp for Ubuntu,安裝方法可以參考我前一篇文章《Ubuntu16.04的PHP開發環境配置》。然后配置系統的php環境,執行如下命令

將系統php和xampp中的php鏈接在一起,這樣可以方便測試php擴展。系統的php命令路徑在 cd /usr/local/bin,所以先切換到該路徑下

cd /usr/local/bin 
sudo mv php php-5.4.45
sudo mv php-cgi php-cgi-5.4.45
sudo mv php-config php-config-5.4.45
sudo mv phpize phpize-5.4.45

sudo ln -s /opt/lampp/bin/php-5.4.31 php
sudo ln -s /opt/lampp/bin/php-cgi-5.4.31 php-cgi
sudo ln -s /opt/lampp/bin/php-config-5.4.31 php-config
sudo ln -s /opt/lampp/bin/phpize-5.4.31 phpize
sudo ln -s /opt/lampp/etc/php.ini /usr/local/lib/php.ini

執行之后,xampp apache使用的php和終端使用的php就是同一個了。

接下來就可以開始創建項目了,設置PHP源碼放置在 home/Projects/php-5.4.45-src

注意  ext_skel 剛開始是沒有執行權限的,需要執行如下命令 給予執行權限

chmod 777 ext_skel

那么接下去創建項目可以執行如下的命令

cd /home/Projects/php-5.4.45-src/ext
sudo ./ext_skel --extname=hello
cd hello
gedit config.m4 /*找到第16行和第18行去掉前面的dnl注釋,如下圖所示*/
sudo phpize sudo ./configure sudo make && make install sudo make test

 

注意保存文件之后,還需要執行phpize,否則還是會碰到不生成.so文件的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM