## 安裝PHP7.3
參考文檔:
[php7源碼編譯安裝](https://www.cnblogs.com/huanhang/p/8250992.html)
[php7源碼編譯安裝](https://blog.csdn.net/xiao_zhui/article/details/72556781)
[詳細介紹CentOS7編譯安裝PHP7的示例代碼](http://www.php.cn/php-weizijiaocheng-359129.html)
### 安裝基礎軟件包
系統啟動后,我們測試一下網絡:
用root賬號登錄CentOS,輸入命令:
:-: 
OK,網絡正常,按Ctrl + C結束ping命令。
#### 開啟SSH登錄
~~~
修改/etc/ssh/sshd-config文件.
將其中的PermitRootLogin no修改為yes
PubkeyAuthentication yes修改為no
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉,
PasswordAuthentication no修改為yes就可以了。
~~~
下面開始安裝需要的軟件。
#### 讓yum跑的快一點
~~~
[root@localhost ~]# yum makecache fast
~~~
#### 安裝net-tools
~~~
[root@localhost ~]# yum -y install net-tools
~~~
安裝完成后,執行
~~~
[root@localhost ~]# ifconfig
~~~
OK,可以看到網絡配置情況了
#### 安裝Vim和wget
~~~
[root@localhost ~]# yum -y install vim
[root@localhost ~]# yum -y install wget
~~~
這個時候我們可以關機,做一個給系統拍一個快照
~~~
[root@localhost ~]# shutdown now
~~~
關機后,選擇VMWare Workstations的菜單“虛擬機”-->“快照”-->“拍攝快照”,起個名字保存即可。如果以后我們想有一個全新的環境,可以從這個快照啟動。
然后重新啟動虛擬機,用root賬號登錄,我們開始安裝PHP 7.3
### 安裝PHP
我們選擇從Github下載PHP源碼:
PHP項目地址是`https://github.com/php/php-src`
我們要先安裝 Git客戶端
~~~
[root@localhost ~]# yum -y install git
~~~
創建一個目錄保存我們的源碼包
~~~
[root@localhost ~]# mkdir packages
[root@localhost ~]# cd packages
~~~
通過Git下載PHP源碼
~~~
[root@localhost packages]# git clone https://github.com/php/php-src.git
~~~
這個包比較大,要下載一陣子。出去抽支煙回來,OK,下載完了。
稍等,我拍個快照先……
好了,拍完了,我們要編譯PHP了。編譯PHP需要依賴挺多東西的,我們先安裝起來:
~~~
[root@localhost packages]# yum -y install libxml2 libxml2-devel openssl openssl-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel pcre pcre-devel libxslt libxslt-devel bzip2 bzip2-devel autoconf automake libtool bison
[root@localhost packages]# wget https://nih.at/libzip/libzip-1.2.0.tar.gz
[root@localhost packages]# tar zxf libzip-1.2.0.tar.gz
[root@localhost packages]# cd libzip-1.2.0
[root@localhost libzip-1.2.0]# ./configure
[root@localhost libzip-1.2.0]# make
[root@localhost libzip-1.2.0]# make install
[root@localhost libzip-1.2.0]# echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf&&ldconfig -v
[root@localhost libzip-1.2.0]# cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
~~~
OK,萬事俱備了,開始編譯PHP
~~~
[root@localhost libzip-1.2.0]# cd ../php-src
[root@localhost php-src]#
~~~
看一看PHP源碼里的版本分支
:-: 
好吧,好多,你想要哪個?我想要PHP-7.3,我們檢出它
~~~
[root@localhost php-src]# git checkout PHP-7.3
~~~
開始編譯吧
~~~
[root@localhost php-src]# ./buildconf
[root@localhost php-src]# ./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip
[root@localhost php-src]# make
~~~
很久很久以后……終于make完了,如果你看到最后輸出的信息是:
~~~
Build complete.
Dont't forget to run 'make test'.
~~~
恭喜你,一次成功了!接下來我們安裝編譯好的PHP
~~~
[root@localhost php-src]# make install
~~~
PHP默認安裝在`/usr/local/php`下。如果要改變這個安裝路徑。需要修改編譯選項中的`--prefix=/usr/local/php`。
更多的編譯選項可以使用命令`./configure --help`查看
另外注意一個地方就是php.ini配置文件的位置可以在編譯前配置參數中設置,編譯參數可以寫成:`--with-config-file-path=/usr/local/php` ,這樣的話php就會去指定的目錄下讀取php.ini配置文件,如果不加這個參數默認位置就是php安裝目錄下的lib目錄,具體也可以在phpinfo()輸出界面查看,如果php.ini放到其他位置,php讀取不到,那么所有的配置修改后都是不生效的,這點要注意。
接下來把php.ini拷貝到指定位置。我們使用PHP提供的php.ini-development(在php-src目錄下)作為開發服務器的php.ini文件:
~~~
[root@localhost php-src]# cp php.ini-development /usr/local/php/lib/php.ini
[root@localhost php-src]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@localhost php-src]# ln -s /usr/local/php/sbin/php-fpm /usr/local/bin
~~~
然后設置php.ini,使用: `vim` 打開php配置文件` /usr/local/php/lib/php.ini`,找到cgi.fix_pathinfo配置項,這一項默認被注釋并且值為1,根據官方文檔的說明,這里為了當文件不存在時,阻止Nginx將請求發送到后端的PHP-FPM模塊,從而避免惡意腳本注入的攻擊,所以此項應該去掉注釋并設置為0。
現在需要配置PHP運行使用的賬號
~~~
[root@localhost php-src]# groupadd www
[root@localhost php-src]# useradd -g www www
~~~
查看php-fpm.conf文件配置是否正確:
~~~
[root@localhost php-src]# vim /usr/local/php/etc/php-fpm.conf
~~~
文件最后一行是要包含php-fpm.d目錄下的所有.conf文件,查看路徑配置是否正確。如果編譯時添加--prefix選項,這里的路徑會配置為正確的路徑,否則會是一個NONE字樣,修改為正確路徑即可。
:-: 
把上圖中錯誤的路徑修改為下圖正確的路徑即可

默認情況下php-fpm.d下有一個名為`www.conf.defalut`的配置用戶的文件,復制一個新文件并且打開:
~~~
[root@localhost php-src]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
[root@localhost php-src]# vim /usr/local/php/etc/php-fpm.d/www.conf
~~~
找到文件中的下面部分:
:-: 
修改為我們新增的用戶www和組www:
:-: 
接下來我們配置php-fpm服務。
用`vim`創建一個文件 `/etc/init.d/php-fpm`
~~~
[root@localhost php-src]# vim /etc/init.d/php-fpm
~~~
粘貼文件內容如下:
~~~
#!/bin/sh
# chkconfig: 2345 15 95
# description: PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation \
# with some additional features useful for sites of any size, especially busier sites.
# DateTime: 2016-09-20
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
phpfpm="/usr/local/php/sbin/php-fpm"
prog=$(basename ${phpfpm})
lockfile=/var/lock/subsys/phpfpm
start() {
[ -x ${phpfpm} ] || exit 5
echo -n $"Starting $prog: "
daemon ${phpfpm}
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc ${phpfpm} -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
${phpfpm} -t
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"
exit 2
esac
~~~
注意修改`phpfpm="/usr/local/php/sbin/php-fpm"`為你的真實路徑。
保存退出。
把php-fpm添加到服務里:
~~~
[root@localhost php-src]# chkconfig --add php-fpm
[root@localhost php-src]# chkconfig php-fpm on
[root@localhost php-src]# chmod a+wrx /etc/init.d/php-fpm
[root@localhost php-src]# service php-fpm start
[root@localhost php-src]# service php-fpm status
~~~
現在php-fpm服務做好了,會和系統一起啟動。
接下來我們把php路徑添加到環境變量里。編輯`/etc/profile`文件:
~~~
[root@localhost php-src]# vim /etc/profile
~~~
在文件末尾加入如下幾行:
~~~
PHP_HOME=/usr/local/php/bin
PATH=$PATH:$PHP_HOME
export PHP_HOME PATH
~~~
然后加載新的配置:
~~~
[root@localhost php-src]# source /etc/profile
~~~
現在可以在任何路徑下執行php命令了。看看成果吧:
命令行執行:
:-: 
php-fpm服務
:-: 
PHP 7.3編譯安裝結束
現在,我們關閉虛擬機,拍攝快照,繼續下面的安裝