1. 程式人生 > >ubuntu php多版本共存切換,為每個站點設定不同的php版本

ubuntu php多版本共存切換,為每個站點設定不同的php版本

做開發時,由於本機開發的php版本跟線上釋出的php版本不一致,很容易在上線後,發現因版本的影響導致一些bug,但又不想重新去換本機的php版本,那麼多版本共存就很方便了!有必要時,切換到指定版本測試下,沒問題再上線就OK了!

LMAP環境安裝記錄如下:

sudo apt-get install -y apache2

安裝:mysql5.7(ubuntu16.04自帶)
sudo apt instal -y mysql-server mysql-client libmysqlclient-dev mysql-workbench

安裝:php5.6
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php5.6-common php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-gd php5.6-curl php5.6-json php5.6-fpm php5.6-zip php5.6-mcrypt libapache2-mod-php5.6


安裝:php7.0
sudo apt-get install -y php7.0-common php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-xml php7.0-gd php7.0-curl php7.0-json php7.0-fpm php7.0-zip php7.0-mcrypt libapache2-mod-php7.0


安裝:php7.1
sudo apt-get install -y php7.1-common php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-xml php7.1-gd php7.1-curl php7.1-json php7.1-fpm php7.1-zip php7.1-mcrypt libapache2-mod-php7.1

#開啟重寫轉向
sudo a2enmod rewrite
sudo a2enmod headers至此安裝完成

重啟:sudo service apache2 restart

sudo vi .bashrc
#編輯bashrc加入自定義命令,為方便在不同php版本間切換
alias php56='sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2enmod php5.6 && sudo service apache2 restart'
alias php70='sudo a2dismod php5.6 && sudo a2dismod php7.1 && sudo a2enmod php7.0 && sudo service apache2 restart'
alias php71='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2enmod php7.1 && sudo service apache2 restart'

安裝完成後,重啟電腦,預設是執行5.6版本的php(命令列下php-v 是顯示最高版本7.1)

在/etc/php目錄下有對應版本號的資料夾,編輯相應的php.ini可配置相應的php版本,命令列下php70可切換到php7版本,其它類同

本人用的ubuntu16.04,親測14.04也可用!

————————————————————分割線——————————————————————

既然安裝了多個版本,那麼是否可以讓不同的網站載入不同的php版本呢?

網上搜索一片,很多都是用nginx來處理多站點用不同php版本,但我真不想那麼麻煩再裝個nginx,基本上都是用代理轉發,apache本身就有proxy,所以用apache本身的也就好

個人開發習慣上是用虛擬主機,所以,配置了一下虛擬主機的目錄

#以下配置放到檔案最後面,在此配置後面的網站,也會引用此php版本

<VirtualHost *:80>

        ServerName my.xxx.com

        DocumentRoot /var/www/html/xxx
####載入不同的php版本####

        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
        </FilesMatch>

####載入不同的php版本####

</VirtualHost> 完成後,儲存! 同時,再啟用以下兩個模組
sudo a2enmod proxy proxy_fcgi
重啟:sudo service apache2 restart

注意apahce版本為2.4.10版本以上才有效,本人ubuntu14.04系統的apache為2.4.7版本,所以升級到最新版本

sudo add-apt-repository ppa:ondrej/apache2
sudo apt-get update
sudo apt-get dist-upgrade



感謝以下網址的作者:

1、https://cnzhx.net/blog/apache-httpd-mod_proxy_fcgi-php-fpm/

2、https://stackoverflow.com/questions/23931987/apache-proxy-no-protocol-handler-was-valid

3、https://www.ciandt.com.cn/zh/highlights/blog/php-multiple-version-configuration