最近試了一下PHP7,在編譯和支持MySQL上都遇到一些問題,相信很多同窗也一樣遇到,因此在這裏聊一下這個過程。簡單來說編譯PHP7只須要3步:php
一、./buildconf --forcemysql
二、./configuregit
三、make && make installgithub
一、3步,都沒啥好管的,configure是編譯的關鍵,涉及到PHP對一些庫的支持,這裏咱們使用最小的支持,包括MySQL:sql
curl服務器
gdphp7
fpmapp
mysqlndcurl
之因此把curl和gd拿來講,目的是要搞清楚,這些三方庫在編譯PHP以前得安裝好,能夠直接使用yum安裝在默認位置,也能夠編譯安裝到指定位置,yum安裝後,編譯時不用指定庫的安裝位置,關於安裝這些庫,能夠搜索一下有不少。下面看看基本的configuresocket
./configure --prefix=/apps/php/php7.0 --enable-mbstring --with-curl --with-gd --with-config-file-path=/apps/php/php7.0/etc/ --enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd
關於fpm,相信不用多說,用它來支持PHP是一個比較好的選擇,PHP5.3.3開始就已經內置了php-fpm,因此PHP7裏固然也有,只須要--enable-fpm一下就能夠了
php-fpm參數:
--start 啓動
--stop 強制終止
--quit 平滑終止
--restart 重啓
--reload 從新平滑加載php的php.ini
--logrotate 從新啓用log文件
重點講一下這個,由於在它上面花了一點時間,不知道從哪一版本開始,PHP不在但願使用mysql的庫來支持mysql的鏈接,啓用了mysqlnd來支持,據說比libmysql要快不少,PHP5.x還可使用libmysql,PHP7貌似已經取消了支持,編譯都沒有了--with-mysql參數,只支持--with-mysqli和--with-pdo-mysql,能夠經過查看configure的參數來知道:
./configure -help | grep mysql
能夠看到,PHP但願使用mysqlnd來支持MySQL,因此參數能夠這樣寫:
--enable-mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
mysqlnd是不須要mysql支持的,因此不用先安裝好mysql同樣能夠編譯經過,啓動php-fpm,查看一下phpinfo,能看到mysqlnd和pdo_mysql表示php已經能夠支持mysql了(這裏用的是pdo,mysqli同理)
這個問題是第一次遇到,原來是個人阿里雲服務器關掉了swap,內存不夠用,就報了這個錯。 解決辦法很簡單,configure時加上--disable-fileinfo參數就能夠了。
正如它所說,確實沒找到,看看phpinfo中pdo_mysql.default_socket項
mysql.sock在哪裏,再看一下mysql.sock的真正位置,使用命令:ps -ef|grep mysql查看:
明顯不在一個位置上,個人正確位置是:/var/lib/mysql/mysql.sock
因此,修改一下php.ini,找到pdo_mysql.default_socket,改成你的實際位置,重啓一下php-fpm,很不幸,雖然php.ini有這個配置,修改後,居然不行,最好是編譯的時候,指定mysql.socket的位置:
--with-mysql-sock=/var/lib/mysql/mysql.sock
若是還不行,能夠到/tmp目錄下創建一個mysql.sock的軟連接:
ln -s /var/lib/mysql/mysql.sock mysql.sock
再重啓一次php-fpm,相信已經正常運行了。若是須要PHP支持的庫更多,能夠再次編譯,在configure時把須要的支持加上,就是--with-xxx這中,記得若是是三方的,要先安裝這些庫才行哦。