前言感悟
脈脈上一哥們的話越發覺得計算機科班出身的優勢,編程越久,越覺得基礎知識的重要性,就像一座繞不過去的大山,峰迴路轉,可能前途坦蕩,但是總會遇見這座山,只有迎難而上,一鼓作氣翻過去,才能繼續腳下的路.
我非常贊同,程式設計越久越得往底層研究才能提升自己,所以下一個目標要係統的研究PHP源碼。正好,我報的成考正在學C,老師是個NB的學院派人物。號稱光讀過C的書疊起來比講桌高。
準備
從網路上找發現對php擴充開發的資料不是很多很全,也沒有成型的論壇。看來這方面的需求不是很多。
首先你得下載php源碼,可以git/svn或官網上下載.我是從官網下的,因為網上說git下的源碼有的沒有phpize這個工具(我也沒試過)phpize是用來擴展PHP擴展模組的。
開始
進入下載好的php來源碼
php源碼的ext目錄有一個ext_skel文件,使用它可以方便的搭建一個PHP擴展框架,下面就創建一個myext擴展
進入ext目錄 cd ext/
./ext_skel –extname=myext
Creating directory myext
Creating basic files: config.m4 config.w32 .gitignore myext.c php_myext.h CREDITS EXPERIMENTAL tests/001.phpt myext.php [done].
To ollo your new extwingension, you ?
這時,你的目錄下應該有一個myext目錄,這就是ext_skel幫你產生的擴充框架。
然後需要修改config.m4
將以下程式碼 前面的 dnl去掉:
<code>dnl PHP_ARG_ENABLE(myext, whether <span>to</span> enable myext support, dnl [ <span>--enable-myext Enable myext support])</span></code>
儲存後退出!
開始編譯
在myext目錄下。執行下面程式碼:
<code>phpize <span>.</span>/configure <span>--</span><span>with</span><span>-php</span><span>-config</span><span>=</span>/usr/<span>local</span>/php/bin/php<span>-config</span> make make test make install</code>
make install之後會提示你安裝擴充功能的目錄/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/ 進入後可以看到myext.so
接著在php.ini 加入擴充資訊
使用php -m 指令就可以看到擴充功能是否安裝成功。
重啟fpm 在phpinfo中就可以看到安裝好的擴充這裡安裝一個擴充就完成了。
在make test的時候會警告有些函數在php.ini中被停用。找到php.ini的disable_function將警告函數去掉。另外再解釋下linux的GNU的AUTOCONF和AUTOMAKE所產生的程式的安裝步驟
config/configure/Configure
這個是用來偵測你的安裝平台的目標特徵的。例如它會偵測你是否有CC或GCC,並不是需要CC或GCC,它是個shell腳本
這一步一般用來產生 Makefile,為下一步的編譯做準備,你可以透過在 configure 後面加上參數來控制安裝,例如:
上面的意思是將該軟體安裝在 /usr 下面
執行檔就會安裝在 /usr/bin (而不是預設的 /usr/local/bin)
資源檔案就會安裝在 /usr/share(而不是預設的/usr/local/share)
同時一些軟體的設定檔你可以透過指定 –sys-c
還有諸如:–with、–enable、–without、–disable 等等參數對編譯加以控制,你可以透過 ./configure –help 察看詳細的說明幫助
make
這一步驟是用來編譯的,它從Makefile讀取指令,然後編譯
這一步就是編譯,大多數的原始碼包都經過這一步驟編譯
當然有些perl或python所寫的軟體需要呼叫perl或python來進行編譯
如果在make 過程中出現error ,你就要記下錯誤代碼(注意不只是最後一行),然後你可以向開發者提交bugreport(一般在INSTALL 裡有提交地址),或者你的系統少了一些依賴庫等,這些需要自己仔細研究錯誤代碼
make test / make check
顧名思義,這一步就是對上一步 make 的檢查了,要確保 make 是沒有錯誤的,也就是這一步的 test、check要全部是 OK 的,error 為0
sudo make install
這一步驟是用來安裝的,它也從Makefile讀取指令,安裝到指定的位置
這條指令來進行安裝,一般需要你有 root 權限(因為要寫入檔案到系統),所以前面用了 sudo
AUTOMAKE和AUTOCONF是非常有用的用來發布C程式的東西。如果你也寫程式想使用AUTOMAKE和AUTOCONF,可以參考CNGNU.ORG上的相關文章
以上就介紹了linux下開發PHP擴充安裝篇,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。