多版本php共存 linux,linux下多版本php共存的原理、方法
服務器當前PHP版本5.4,新項目中使用了Laravel,PHP版本最低要求5.6。希望保持現有應用同時使用PHP5.6.*。也就是說需要兩個版本的PHP同時存在,供nginx根據需要調用不同版本。
一、原理:
Nginx是通過PHP-FastCGI與PHP交互的。而PHP-FastCGI運行后會通過文件、或本地端口兩種方式進行監聽,在Nginx中配置相應的FastCGI監聽端口或文件即實現Nginx請求對PHP的解釋。
既然PHP-FastCGI是監聽端口和文件的,那就可以讓不同版本的PHP-FastCGI同時運行,監聽不同的端口或文件,Nginx中根據需求配置調用不同的PHP-FastCGI端口或文件,即可實現不同版本PHP共存了。
二、方法:
原理很簡單,操作方法其實也很簡單。
1.php-fpm監聽不同端口,如9000(默認)、9001
2.Nginx配置調用端口,(9000,9001)
第一步,PHP編譯安裝的話,php-fpm配置文件路徑一般是
/PHP_INSTALLED_PATH/etc/php-fpm.conf
(php剛編譯安裝完時配置文件名為php-fpm.default.conf,直接改名為php-fpm.conf即可),當然這個路徑是編譯時配置的,上面這個路徑算是最佳實踐吧。
下面這里即是配置監聽端口的地方,此處端口9000改為9001,其他配置參考舊版本php-fpm.conf的配置即可。listen = 127.0.0.1:9000#fpm監聽端口,即nginx中php處理的地址,一般默認值即可。可用格式為: 'ip:port', 'port', '/path/to/unix/socket'. 每個進程池都需要設置.
注意,如果是要安裝5.2及以前版本需要打php-fpm補丁,下載fpm補丁包并執行命令gzip-cdphp-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
第二步,修改Nginx vhost.conf配置文件,添加如下部分:
1 server {
2 ? ? listen ? ? ? 80;
3 ?? ?server_name ?a.b.com;
4 ?? ?index index.html index.htm index.php;
5 ? ? root /MY_PROJECT_PATH; 6 ?7 ? ? location / {
8 ? ? ? ? ? ?try_files $uri $uri/ /index.php?$query_string;
9 ?? ?}
10 ? ? location ~ .*\.(php|php5)?$ ? ? ? ? {
11 ? ? ? ? #fastcgi_pass ?unix:/tmp/php-cgi.sock;
12 ? ? ? ? fastcgi_pass ?127.0.0.1:9001;
13 ?? ? ? ?fastcgi_index index.php;
14 ?? ? ? ?include fastcgi.conf;
15 ?? ?}16 }
上面9001部分即是將所有.php和.php5文件請求都轉發到9001端口。
第三步、啟動新版php-fpm,重啟nginx。
php-fpm支持的操作:start,啟動PHP的FastCGI進程。
stop,強制終止PHP的FastCGI進程。
quit,平滑終止PHP的FastCGI進程。
restart, 重啟PHP的FastCGI進程。
reload, 重新加載PHP的php.ini。
logrotate, 重新啟用log文件。
常見錯誤1:php-fpm start啟動后通過瀏覽器訪問項目出現502BAD GATEWAY,查看netstat -ano發現并沒有監聽到9001端口的程序,應該是php-fpm啟動出錯。
查資料發現可以通過指定配置文件來啟動php-fpm,命令如下:#測試php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t
#啟動php-fpm/usr/local/php/sbin/php-fpm/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf
指定配置文件后啟動正常,正確監聽9001端口
常見錯誤2:ERROR: [pool?www]?cannot?get?uid?for?user?'@php_fpm@
ERROR:?FPM?initialization?failed
解決辦法是修改php-fpm.conf中user和group部分為系統用戶的名字,如root或www(應用這個,root千萬別用,權限太大)
通過以上三步便實現了Linux上多版本PHP共存,不過這個前提是服務器上已經安裝了兩個版本的PHP。
原文出處:http://www.cnblogs.com/ningskyer/articles/5639276.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的多版本php共存 linux,linux下多版本php共存的原理、方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 选中当前,Java开发网 -
- 下一篇: 安卓+php推,使用 PHP 消息队列实