本文以當前最新版本 PHP 7.3.1
演示整個源碼安裝的流程。php
訪問 PHP 官網的源碼包下載地址 http://php.net/downloads.php。mysql
如圖所示,PHP 源碼提供了三種壓縮格式,一般壓縮後的文件越小,意味着解壓縮須要的時間和 CPU 消耗就會更多,這裏要根據安裝 PHP 的服務器硬件狀況和帶寬選擇合適的壓縮格式,我選擇下載 php-7.3.1.tar.gz
。 nginx
下載源碼有兩種方式:c++
FTP
傳到服務器。以第一種方法爲例,在服務器端執行:sql
wget -c http://cn2.php.net/distributions/php-7.3.1.tar.gz
點開其中一個壓縮包,右擊 China 的 cn2.php.net
複製連接地址,能夠得到另外一個下載地址,獲取方式以下圖所示:segmentfault
http://cn2.php.net/get/php-7.3.1.tar.gz/from/this/mirror # 此地址的下載命令,使用 -O 重命名源碼包,不然下載後的文件名會是 mirror wget -O php-7.3.1.tar.gz http://cn2.php.net/get/php-7.3.1.tar.gz/from/this/mirror
若是須要下載其餘版本,只須要修改下載地址中的版本號,例如 php-7.2.14.tar.gz
。bash
使用 tar 命令解壓 tar.gz
壓縮包:服務器
tar -xzvf php-7.3.1.tar.gz
安裝 PHP 須要的擴展庫php7
yum install -y libxml2 *openssl* libcurl* libjpeg* libpng* freetype* libzip* libmcrypt*
進入解壓後的 php-7.2.4
文件夾,運行 configure 可執行文件:curl
./configure --prefix=/mnt/php7 --with-mysqli --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-simplexml --enable-xml --disable-rpath --enable-bcmath --enable-soap --enable-zip --with-curl --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mbstring --enable-sockets --with-gd --with-openssl --with-mhash --enable-opcache --disable-fileinfo
若是最後顯示以上界面,說明已經成功安裝。
因爲我測試的是一個新的服務器,因此依次遇到了如下錯誤,沒有出現問題能夠跳過這部分:
錯誤1:
configure: error: in `/root/php-7.3.1': configure: error: no acceptable C compiler found in $PATH
# 缺乏 c 編譯器,安裝 GCC yum install gcc
錯誤2:
checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11
# 查看 yum 安裝的 libzip 版本 yum list installed | grep libzip # 發現 yum 安裝的 libzip 版本太低,卸載低版本 yum remove libzip*
源碼安裝 libzip
# 源碼編譯安裝 libzip 最新版 # libzip 官網地址:https://libzip.org wget https://nih.at/libzip/libzip-1.5.1.tar.gz tar -zxvf libzip-1.5.1.tar.gz cd libzip-1.5.1 ## 查看 INSTALL.md 其中有安裝提示 mkdir build cd build cmake .. make make test make install
上述命令在執行 cmake ..
時報錯,使用 yum 安裝了 gcc-c++
yum -y install gcc-c++
又從新源碼編譯安裝了了 Cmake
,參考這篇文章 。
錯誤3:
error: off_t undefined; check your library configuration
# 添加搜索路徑到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf # 更新配置 ldconfig -v
此錯誤詳細解釋參考 https://segmentfault.com/q/10... 中 @代碼狗 的回答。
編譯和安裝
make && make install
進入 /mnt/php7/sbin
,啓動 php-fpm
[root@localhost sbin]# ./php-fpm [15-Jan-2019 03:32:21] ERROR: failed to open configuration file '/mnt/php7/etc/php-fpm.conf': No such file or directory (2) [15-Jan-2019 03:32:21] ERROR: failed to load configuration file '/mnt/php7/etc/php-fpm.conf' [15-Jan-2019 03:32:21] ERROR: FPM initialization failed
解決辦法:
# 進入 /mnt/php7/etc,複製 php-fpm 的配置文件 [root@localhost etc]# cp php-fpm.conf.default php-fpm.conf # 進入 /mnt/php7/etc/php-fpm.d,複製 php-fpm 的子配置文件: [root@localhost php-fpm.d]# cp www.conf.default www.conf
在運行 php-fpm 前,還須要修改其子配置文件中的用戶和用戶組,以 nginx 爲例,編輯 /mnt/php7/etc/php-fpm.d
文件:
user = nginx group = nginx
至此就能夠啓動 php-fpm 了。
在命令行下運行 php,須要將可執行文件複製到環境變量下:
cp /mnt/php7/bin/php /usr/local/bin/php # 命令行下查看 php 版本 php -v