Linux服務器部署php環境 版本php-5.6.40(踩坑版)


項目需求要在阿里雲ecs ubuntu服務器上部署php環境以便配置前端代碼

與前端小哥探討好兼容版本后,決定使用php-5.6.40

 

部署這玩意整了我半天。。。(踩坑...移坑!...踩坑...移坑!...)

進入步驟

1. 獲取源yum,由於配置出了點問題我放棄了,還是apt-get安裝工具

2. 安裝php5.6.40

服務器上/usr/local/目錄下執行命令

$ sudo apt-get update
$ sudo apt-get -y install php5.6.40

由於還要加一堆擴展,我打算直接搞源碼包

拎着tar包用sfpt直接生猛拖拽到目錄下

推薦mac系統比較好用的svn管理工具FillZilla(這個是我用過最順手的)/CornerStone(svn提代碼版本控制記錄很清晰,有時候down代碼程序卡住不知啥原因)

回到話題,運用tar命令

tar -zxvf php-5.6.40.tar.gz

在服務器上解壓出現問題

gzip: stdin: unexpected end of file

tar: Unexpected EOF in archive

tar: Unexpected EOF in archive

tar: Error is not recoverable: exiting now

查了一些大神的解決方法,大概問題都是源碼包破壞或不完整,但重新下載后,嘗試未果

問道同事原因可能是文件類型不支持,我反手就在本地同樣執行了一下

 

並沒有任何異常。。。卡住

准備用最笨的方法直接把解壓好的文件拖服務器上。。。上百兆的文件,兩次sftp連接都中斷了。。。再次卡住

翻大神博客的時候想到:問題一定是出在生拖到服務器導致文件破壞了

解決方法:

避免文件類型沖突,gz -> tar -> unzip file

到服務器/usr/local/目錄

sudo apt-get -y install php5.6.40
gunzip php-5.6.40.tar.gz

得到 php-5.6.40.tar 然后tar命令執行,

tar -xvf php-5.6.40.tar

成功解壓!

3. 配置php

 執行命令

cd /usr/local/php-5.6.40
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-iconv=/usr/local/php/libiconv --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-jpeg-dir --with-png-dir --with-pear --with-freetype-dir --with-zlib --with-libxml-dir --with-iconv-dir --with-xmlrpc --with-mhash --with-mcrypt --with-curl --with-openssl --with-snmp --with-gettext --enable-pdo --enable-mbstring --enable-ctype --enable-simplexml --enable-ftp --enable-sockets --enable-gd-native-ttf --enable-sysvsem --enable-exif --enable-sysvshm --enable-xml --enable-dom --enable-simplexml --enable-shmop --enable-zip --enable-mbregex --enable-bcmath --enable-inline-optimization --enable-soap
make
make test
make install
#配置文件,移動+改名
cp /usr/local/php-5.6.40/php.ini-production /usr/local/php/lib/php.ini

4. index.php測試是否運行成功

輸入命令php -v 正常查看到版本號后,在虛擬目錄下放了個文件index.php

確保apache2正常運行后

地址欄輸入發現無權限。。。卡住again(絕望...)

 

 

 再次翻閱大神的解決方案

基於沒有權限的問題,我嘗試了所有可能

對於apache服務器,httpd.conf文件下需要改

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Order deny,allow
  Allow from all
  Satisfy all
</Directory> 

對於apache2,apache2.conf文件下要

保證Require all granted

<Directory />
    AllowOverride All
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.htm index.php
</IfModule>

解決方法:

找到apache2.conf / httpd.conf

找不到的話:

$ find / -name apache2.conf

cd到目錄

$ vim apache2.conf

按上面修改/添加內容

esc鍵

:wq(保存退出)

重啟apache

打開網頁后發現問題:輸出了源代碼

<?php

    phpinfo();

?>

顯然apache沒有解析php

再次查看大神的方案,修改配置文件FilesMatch

<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch>

並在配置文件上加上這一行 

AddType application/x-httpd-php .php

重啟apache,無反應

通過搜索大神們的經驗,我發現

/usr/lib/apache2/modules/

此目錄下沒有libphp5.so,導致apache無法解析php

解決方法:

回到php安裝目錄下重新make,./configure

cd /usr/local/php-5.6.40
make clean #重新編譯前一定要clean!!!
#之前發現configure后面擴展參數跟了一大堆,但沒有幾個需要用,想要php支持誰就加上
./configure 
--prefix=/png/php/5.6.40      #php安裝目錄
--enable-fpm                  #支持fpm組件
--with-openssl          #支持生成證書
--with-apxs2=/usr/bin/apxs2 #最重要!!生成libphp5.so                   #mysql --with-mysqli --with-pdo-mysql --with-pdo-sqlite
make make test make install

重啟apache2

報錯:Apache is running a threaded MPM,but your PHP Modle is not compiled to be threadsafe. You need to recompile PHP.

又一次翻了好多大神經驗,我這次真的有點怕把apache搞崩。。。

主要錯誤意思是:php編譯模式出錯。我安裝的版本php不是線程安全的,但apache2是基於MPM模式。

windows系統下的php源碼包不能下載Non-thread-safe zip pkg,

linux下編譯的時候不能生成認證證書,干掉--with-openssl 擴展參數

configure加上參數 

--enable-maintainer-zts

這個太重要了,整了我好久。。。

解決方法:

回到php安裝目錄下重新make,./configure

cd /usr/local/php-5.6.40
make clean

./configure --prefix=/png/php/5.6.40 --enable-fpm --with-apxs2=/usr/bin/apxs2 --with-mysqli --with-pdo-mysql --with-pdo-sqlite --enable-maintainer-zts

make
make test
make install

重啟Apache2

apachectl -k restart

打開頁面index.php

 完美!

完結,散花!!!

p.s. 整了一天多,踩了很多坑,吸取教訓,多查資料,多思考,總會解決問題的。

記錄自己的技術生涯,大神莫噴,有問題大家溝通伐!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM