當你看到這篇文章的時候 YHSPY.COM 服務器上的PHP版本已經從 5.4.27 升級到了 7.0.4,這是一個重大的飛躍。一路升級遇到了很多問題。官方聲稱PHP7最大的升級就是在語言性能上的提升,最大到達了30%。同時也去掉了很多老版本中Deprecated的函數和方法,語言整體變得更加穩定。
首先聲明,此文不適用於使用yum方式安裝的PHP環境的升級,只適用於使用PHP源代碼編譯安裝的PHP版本。升級之前首先需要判斷服務器上Apache的版本,根據不同的Apache版本來參考不同的官方編譯文檔。用以下命令來查看當前Apache的版本:
... (詳見原文)
由以上命令返回的結果可知,Apache服務器為2.X版本,所以此處應該參考官方給出的PHP編譯在Apache版本2.X上的編譯參考文檔:Apache2.X版本PHP編譯文檔,對於其他版本的Aapche或者Nginx,可以參考此處:其他版本服務器PHP編譯文檔。
接下來我們從PHP官方給出的鏡像地址來獲取PHP源代碼,這些源代碼將會最后被編譯並安裝在我們的服務器上。這里按照官方文檔的說明,我們使用wget命令來獲取源代碼的壓縮包,並逐層解壓,直到生成最后的源代碼文件夾。
... (詳見原文)
由於我們這里為PHP的版本升級操作,所以需要保持新版本PHP源代碼的預編譯參數和舊版本PHP源碼的預編譯參數保持一致。進入到舊版本(當前版本)PHP源碼文件夾內,使用 vi/vim命令打開文件夾內的Mkaefile文件,復制其中的 CONFIGURE_COMMAND 參數部分並整理成如下格式(去掉單引號等):
... (詳見原文)
其實 CONFIGURE_COMMAND 參數的值本身就是對應我們上一次PHP源碼預編譯過程的全部編譯命令(和子參數),這里順便說一下其中幾個子參數的作用。“--prefix”參數用來指定PHP安裝的主要目錄位置,“--with-config-file-path”參數主要用來指定php.ini文件的生成路徑,對於其他子參數的具體用法和說明,請在PHP源代碼文件夾內使用./configure --help命令來查看。
接下來便通過已經整理好的預編譯參數來對源碼進行預編譯操作(即編譯前的配置操作):
.. (詳見原文)
在這里為了防止出現錯誤,我們需要分開執行make編譯和make install安裝兩個操作命令,首先執行make命令來編譯源代碼。
如果在執行過程中遇到“undefined reference to `libiconv'”錯誤,請嘗試為make命令加入ZEND_EXTRA_LIBS參數,如下所示:
.. (詳見原文)
最后執行make install命令來安裝PHP環境:
.. (詳見原文)
在源代碼全部編譯完成並安裝后,便可以用以下命令來重新啟動Apache服務器:
.. (詳見原文)
至此,PHP7的升級就全部結束了,你可以通過phpinfo()函數來查看新版本PHP的相關配置,包括擴展配置和錯誤日志等常用設置是否配置正確。
從PHP5.X升級至PHP7.X后,一些PHP在早期版本不推薦使用的函數比如split()等都已經從PHP7移除了,所以在升級時請參考官方的升級文檔。並且,PHP7也移除了mysql相關的函數,因此只能使用PDO或其他方式來連接數據庫。
寫在最后,其實所謂的預編譯步驟是對源代碼編譯之前進行一些環境配置,比如指定編譯是否攜帶某一模塊,編譯生成的文件夾等。同時在執行./configure時也會同時生成Makefile文件。