溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

LNMP之編譯安裝PHP出現(xiàn)的問題

發(fā)布時(shí)間:2020-07-30 11:23:03 來源:網(wǎng)絡(luò) 閱讀:395 作者:jjjyyy66 欄目:web開發(fā)

    

2010年以前,互聯(lián)網(wǎng)公司最常用的Web服務(wù)組合就是LAMP(即Linux、Apache、MySQL、PHP),近幾年隨著Nginx Web服務(wù)的逐漸流行,又出現(xiàn)了新的Web服務(wù)環(huán)境組合--LNMP or LEMP。LNMP即Linux、Nginx、MySQL、PHP。LEMP中的E表示的也是Nginx,它取自Nginx名字的發(fā)音engine x.目前LNMP已經(jīng)逐漸成為國內(nèi)大中型互聯(lián)網(wǎng)公司網(wǎng)站的主流組合環(huán)境。

LNMP環(huán)境基本請求順序

當(dāng)LNMP組合工作時(shí),首先用戶通過瀏覽器輸入域名請求Nginx Web服務(wù),如果請求是靜態(tài)資源,則由Nginx解析返回給用戶;如果是動態(tài)請求(.php)結(jié)尾,那么Nginx就會把它通過FastCGI接口(生產(chǎn)常用方法)發(fā)送給PHP引擎服務(wù)(FastCGI進(jìn)程php-fpm)進(jìn)行解析,如果這個(gè)動態(tài)請求要讀取數(shù)據(jù)庫數(shù)據(jù),那么PHP就會繼續(xù)向后請求MySQL數(shù)據(jù)庫,以讀取需要的數(shù)據(jù),并最終通過Nginx服務(wù)把獲取的數(shù)據(jù)返回給用戶。

LNMP之編譯安裝PHP出現(xiàn)的問題

2017/5/11截圖。上圖來自https://w3techs.com/technologies/overview/web_server/all。2014年Apache與Ngnix份額分別為58.5%、23.3%

 

背景

上個(gè)星期,Web應(yīng)用開發(fā)老師要檢查作業(yè)。要求把自己做的網(wǎng)頁放到云上去。好吧,于是我去注冊了騰訊云。反正我可以試用一個(gè)月哈哈……

LNMP之編譯安裝PHP出現(xiàn)的問題

接著,我在筆記本用CRT連接到遠(yuǎn)程主機(jī)!! 當(dāng)時(shí)連接成功時(shí),我心里那個(gè)激動啊!!!

LNMP之編譯安裝PHP出現(xiàn)的問題

so, 然后呢?? 我要的是把html代碼放到云服務(wù)器上,接著在我本地電腦輸入url就可以訪問。這顯然沒實(shí)現(xiàn)我的需求。后來,上實(shí)驗(yàn)課問了下同學(xué),說安裝Apache就可以了(最多問下Apache是什么,難道我還問Apache怎么安裝?這會顯得我沒腦子……)。好吧,不得不承認(rèn)我Linux還沒入門……

 

現(xiàn)在,我電腦虛擬機(jī)的Linux系統(tǒng)已經(jīng)裝了Nginx, MySQL, PHP。下圖是我安裝完Nginx后,修改nginx.conf配置文件,index.html文件,及電腦本地的hosts文件后,在本地電腦輸入自定義的域名www.chengliang.com。我能訪問到遠(yuǎn)程Linux系統(tǒng)的html文件(頁面)。牛!!

LNMP之編譯安裝PHP出現(xiàn)的問題

 

編譯安裝PHP出現(xiàn)的問題

OK, 以上,都不是本文的重點(diǎn)。

昨晚在編譯安裝PHP時(shí)出錯(cuò)一些問題,搞得我很晚才睡……

解壓PHP安裝包

1
tar zxf php-5.5.56

配置pHP軟件. 下面這代碼我敲得想吐了……具體參數(shù)意義,參見http://canlynet.iteye.com/blog/1825588

./configure --prefix=/application/php5.6.30 --with-mysql=/application/mysql --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-short-tags --enable-zend-multibyte --enable-static --with-xsl --with-fpm-user=nginx with-fpm-group=nginx --enable-ftp

如果你想在Linux上裝PHP,千萬別直接復(fù)制上面的代碼。上面代碼包含mysql路徑,libiconv庫的路徑等,每臺機(jī)器路徑都可能不同,有些包也可能還沒下載。如果直接復(fù)制進(jìn)行編譯的話,基本都會出錯(cuò),哈哈

編譯PHP軟件./configure,結(jié)束后正確輸出提示,如下圖:

LNMP之編譯安裝PHP出現(xiàn)的問題

 

當(dāng)然,剛開始我沒成功,出現(xiàn)下圖所示的error.

1
configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no

LNMP之編譯安裝PHP出現(xiàn)的問題

 

解決

我上網(wǎng)查了很多很多博客。大部分解決方法是:

編輯 /etc/ld.so.conf 加入/usr/local/lib,在執(zhí)行l(wèi)dconfig,使ld.so.conf文件生效。

but,還是沒解決我的問題!!fuck

差不多要放棄時(shí),看到這博文章http://www.68idc.cn/help/jiabenmake/qita/2014022169481.html, give me hope.

網(wǎng)上的解決思路沒錯(cuò),就是需要關(guān)聯(lián)到某個(gè)so的文件。但是至于具體需要那個(gè).so文件,在什么位置卻并沒有細(xì)究,有點(diǎn)兒“一概論”的意思。我的/usr/local/lib里面實(shí)際上是空的

LNMP之編譯安裝PHP出現(xiàn)的問題

后來搜了很多資料發(fā)現(xiàn),這個(gè)報(bào)錯(cuò)需要的大概是libmysqlclient.so。我的libmysqlclient.so文件在哪呢?我也不知道。不過libmysqlclient.so一看就和mysql有不可告人的關(guān)系,于是我到mysql下找找看。

LNMP之編譯安裝PHP出現(xiàn)的問題

終于,找到了,libmysqlclient.so在/application/mysql/lib路徑下。接下來按原先的步驟執(zhí)行:

1
編輯/etc/ld.so.conf加入這個(gè)路徑,ldconfig。再重新./configure,順利通過。。。

這里給大家分享一下,遇到同樣報(bào)錯(cuò)的朋友要根據(jù)自己的環(huán)境設(shè)置,不能一味照抄網(wǎng)上的命令。

 

雖然重新翻譯PHP成功,但是出現(xiàn)下圖的WARNING

1
configure: WARNING: unrecognized options: --enable-safe-mode, --enable-curlwrappers, --enable-zend-multibyte

LNMP之編譯安裝PHP出現(xiàn)的問題

警告原因:

之前 php-5.3.x 編譯時(shí)加了 --enable-safe-mode --enable-discard-path --enable-fastcgi --enable-force-cgi-redirect選項(xiàng),但是這個(gè)選項(xiàng)沒必要,且會帶來許多的麻煩,詳解可以 google 一下,php-5.4.x 已經(jīng)去掉了該選項(xiàng),編譯時(shí)可以 #./configure --help | grep “safe-mode” 查看一下,沒有信息輸出,表示已經(jīng)不支持!

LNMP之編譯安裝PHP出現(xiàn)的問題

我對--enable-safe-mode, --enable-curlwrappers, --enable-zend-multibyte 這三個(gè)引起警告的選項(xiàng)都過濾一下。發(fā)現(xiàn)都沒有信息輸出。so, php5.6.30應(yīng)該是已經(jīng)不支持這三個(gè)選項(xiàng)了!

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI