本文目錄一覽:
- 1、Linux系統中設置多版本PHP共存配合Nginx伺服器使用
- 2、nginx php 和apache php 哪個性能更高
- 3、nginx和php分別用那個版本最穩定 ?
- 4、如何編譯windows nginx php
Linux系統中設置多版本PHP共存配合Nginx伺服器使用
應用環境
LNMP的環境,當前PHP版本5.3.8,遇到一個應用需求只支持PHP
5.2.x,又希望保持現有應用還是用PHP
5.3.8。也就是說需要兩個版本的PHP同時存在,供nginx根據需要調用不同版本。
思路
Nginx是通過PHP-FastCGI與PHP交互的。而PHP-FastCGI運行後會通過文件、或本地埠兩種方式進行監聽,在Nginx中配置相應的FastCGI監聽埠或文件即實現Nginx請求對PHP的解釋。
既然PHP-FastCGI是監聽埠和文件的,那就可以讓不同版本的PHP-FastCGI同時運行,監聽不同的埠或文件,Nginx中根據需求配置調用不同的PHP-FastCGI埠或文件,即可實現不同版本PHP共存了。
配置記錄
下面記錄簡單的配置流程,基於已經安裝了lnmp的debian環境。當前版本的PHP是5.3.8,位於/usr/local/php。
1.下載PHP-5.2.14及相關的FPM、autoconf組件:
mkdir
~/php5.2
cd
~/php5.2
wget
-c
wget
-c
2.解壓PHP-5.2.14,並打上PHP-FPM的補丁:
tar
zxvf
php-5.2.14.tar.gz
gzip
-cd
php-5.2.14-fpm-0.5.14.diff.gz
|
patch
-d
php-5.2.14
-p1
3.如果你已經通過lnmp安裝,應該已經安裝好了autoconf,如果沒有,請自行下載並編譯autoconf-2.13,然後設置autoconf環境變數:
export
PHP_AUTOCONF=/usr/local/autoconf-2.13/bin/autoconf¬
export
PHP_AUTOHEADER=/usr/local/autoconf-2.13/bin/autoheader
3.編譯安裝PHP-5.2.14在新的路徑(/usr/local/php-5.2.14)下,注意–prefix、–with-config-file-path的路徑,並且打開fastcgi和fpm選項:
cd
php-5.2.14/
./buildconf
–force
./configure
–prefix=/usr/local/php-5.2.14
–with-config-file-path=/usr/local/php-5.2.14/etc
–with-mysql=/usr/local/mysql
–with-mysqli=/usr/local/mysql/bin/mysql_config
–enable-fastcgi
–enable-fpm
make
ZEND_EXTRA_LIBS=’-liconv’
make
install
4.設置/usr/local/php-5.2.14/etc/php-fpm.conf,監聽埠:
value
name=”listen_address”127.0.0.1:9001/value
或者監聽文件:
value
name=”listen_address”/path/to/unix/socket/value
其他參數根據伺服器環境和需求自行定製。
5.啟動php-fpm,以後可以通過php-fpm進行管理:
/usr/local/php-5.2.14/sbin/php-fpm
start
字php5.3.3後,php已經將php-fpm繼承到php中,而且內置的php-fpm默認不支持(start|stop|reload)的平滑啟動參數,需要使用官方源代碼中提供的啟動腳本來控制:
cp
-f
(php
-5.3.x-source-dir)/sapi/fpm/init.d.php-fpm
/etc/init.d/php-fpm
chmod
755
/etc/init.d/php-fpm
/etc/init.d/php-fpm
start
php-fpm支持的操作:
start,啟動PHP的FastCGI進程。
stop,強制終止PHP的FastCGI進程。
quit,平滑終止PHP的FastCGI進程。
restart,
重啟PHP的FastCGI進程。
reload,
重新載入PHP的php.ini。
logrotate,
重新啟用log文件。
5.3.3的php-fpm腳本支持的操作:start|stop|force-quit|restart|reload|status
6.配置好PHP-5.2.14的php.ini,重新載入生效:
vi
/usr/local/php-5.2.14/etc/php.ini
/usr/local/php-5.2.14/sbin/php-fpm
reload
7.修改nginx配置,對需要的服務配置使用PHP-5.2.14:
location
~
.*.(php|php5)?$
{
fastcgi_pass
127.0.0.1:9001;
fastcgi_index
index.php;
include
fcgi.conf;
}
8.記錄一下自己編譯php5.5.10使用的配置
./configure
–prefix=/usr/local/php-5.5.10
–with-config-file-path=/usr/local/php-5.5.10/etc
–with-mysql=mysqlnd
–with-mysqli=mysqlnd
–with-bz2
–with-curl=/usr/bin
–enable-ftp
–enable-sockets
–disable-ipv6
–with-gd
–with-jpeg-dir=/usr/local
–with-png-dir=/usr/local
–with-freetype-dir=/usr/local
–enable-gd-native-ttf
–with-iconv-dir=/usr/local
–enable-mbstring
–enable-calendar
–with-gettext
–with-libxml-dir=/usr/local
–with-zlib
–with-pdo-mysql=mysqlnd
–enable-dom
–enable-xml
–enable-fpm
–with-libdir=lib64
–with-mcrypt=/usr/bin
–enable-zip
–enable-soap
–enable-mbstring
–with-gd
–with-openssl
–enable-pcntl
–with-xmlrpc
–enable-opcache
nginx php 和apache php 哪個性能更高
apache2.0–apache2.2單位進程佔用的內存確實比nginx+php高,似乎網上的博文只比較同等內存如何如何,如果內存足夠大,但cpu、硬碟能力有限時,結果又怎麼樣呢?現在內存很便宜,我們可以直接上它幾十個G。
一個好消息,apache2.4已經出來了,官方說性能如何如何的提高了,改善了內存等方面的問題,只裝了環境,還沒有實戰測試php5.3還是和php5.2有些差別的,程序不兼容,還沒時間改,據說php5.3不是從php5.2來的,是從php5.0進化來的,還沒細研究。
「程序不兼容」,這個問題搞清楚了,不是環境的問題,但也是環境的問題,根源是程序的問題,只是php5.2沒有把有問題的程序檢測出來,照樣給
nginx和php分別用那個版本最穩定 ?
一般來說,不要用最新的版本,參考當前時間往前推一年左右的版本,應該就比較穩定了。沒有特殊要求,基本上這樣選擇就可以了。過於保守的話,很多比較新的,好用的功能用不到。過於激進的話,就有可能會陷入比較新的BUG困境中。
如何編譯windows nginx php
作了N多次php環境的搭建,網上的方法還真是多,但是實際操作起來總有一些大大小小的出入,很多錯誤經常讓我糾結不已.久病成醫,漸漸地我自己就總結出了一些經驗。自我感覺良好。
這種方法並非以前所流行的apache 加 php_module 的方式運行,我是採用nginx 作為web伺服器,以fastcgi的方式運行php。
linux下編譯:
nginx我還是習慣選擇8.54的版本,它的編譯依賴以下幾個軟體包,解壓這些源碼包,在configure中設置好這些源碼的路徑,nginx在編譯的時候會自己將他們編譯進去的:
pcre: 主要用於rewrite等模塊
zlib: 這個不用說了
openssl: 如果你還知道https這個東西,那麼你懂的~~~(當然你可以不需要這個功能)
md5 /sha1: 這兩者都是用於生成信息摘要的希哈演算法,這倆個東西不是必須的,但是我發現如果不選擇其中一個那麼openssl是不會成功地編譯進nginx的
下面是我自己寫的一個安裝腳本,有temp-path字樣的編譯選項所設置都是nginx在運行時產生的臨時文件的路徑,pid-path,lock-path也是臨時文件路徑,log-path是日誌文件路徑,我因為自己機子上一些許可權的問題所以要設置一下.一般情況下其實這些是不必要的,nginx默認會統統把生成的這些文件放在自己的安裝目錄下.
tmp=/tmp/nginx
log=/home/jsckdao/log
pcre=~/Downloads/pcre-8.02
zlib=~/Downloads/zlib-1.2.5-src
openssl=~/Downloads/openssl-0.9.8q
md5=~/Downloads/md5-1.3.0
./configure –prefix=/usr/local/nginx \
–http-proxy-temp-path=${tmp}/nginx-proxy.tmp \
–http-fastcgi-temp-path=${tmp}/nginx-fcgi.tmp \
–http-uwsgi-temp-path=${tmp}/nginx-uwsgi.tmp \
–http-scgi-temp-path=${tmp}/nginx-scgi.tmp \
–http-client-body-temp-path=${tmp}/nginx-client.tmp \
–pid-path=${tmp}/nginx.pid \
–lock-path=${tmp}/nginx.lock \
–http-log-path=${log}/http.log \
–error-log-path=${log}/http-error.log \
–with-pcre=$pcre \ #pcre 源碼包的路徑
–with-zlib=$zlib \ #zlib 源碼包的路徑
–with-http_ssl_module \ #起用ssl支持
–with-openssl=$openssl #openssl 源碼包路徑
make
make install
php(5.2)的編譯可以複雜點,也可以簡單點,因為我們編譯php時主要目的是編譯它的腳本引擎和一些核心庫,很多外圍的東西不一定非要在編譯php的時候加進去,可以在需要的時候將它們編譯成擴展庫再修改配置文件來載入它們。
我的編譯代碼如下:
./configure –prefix=/usr/local/php \
–with-mysql=/usr/local/mysql \#設置mysql的安裝路徑
–enable-fastcgi \ #開啟fastcgi支持
–enable-debug #支持調試
make
make install
其實關於mysql的那一句都是可以不要的,只是我懶得再編譯一次mysql擴展,所以就這樣把它直接編譯進php了,這樣做的前提是你必須先安裝mysql。
令外還有一些注意事項:編譯php時必須確保系統中擁有libxml2與libxml2-dev這倆個軟體包,因為php默認會將xml的功能編譯進去,所以xml的支持是必不可少的。還有一個就是autoconf這條命令了,在編譯擴展的時候,phpize會調用系統中的這個命令來生成擴展包的configure文件,沒有它你就不能作擴展了,這一點也是要記住的,畢竟linux下的php不像windows版那樣事先把所有的擴展都編譯好了。
至於window下nginx,php的安裝就沒有什麼難度了,下個zip包,解壓就能用,只要稍微配置就可以了.
配置:
如果只是想讓php能運行的話那麼直接輸入命令:
./php-cgi -b 3344
這樣就開啟了php的fastcgi進程了,-b參數是綁定該進程的偵聽埠,隨便找個沒用的埠填就可以了,這裡綁定的是3344.
然後在nginx的配置文件中加上這麼幾行:
location ~ \.php$ {
root /home/jsckdao/www; #這是你網站的根目錄
fastcgi_pass127.0.0.1:3344; #這裡指定了fastcgi進程偵聽的埠,nginx就是通過這裡與php交互的
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
如果要改nginx的偵聽埠的話找到”listen”這麼一項,改就是了.運行nginx,在/home/jsckdao/www目錄中寫一個測試文件test.php:
?php
phpinfo();
?
訪問,如果顯示了php所以的配置信息,那麼就基本沒什麼問題,已經可以用這個環境寫些php代碼了.
至於php的調試器我選擇xdebug,不為什麼,習慣所致。載入xdebug時,在配置文件中的寫法根據系統的不同好像也有點不同。linux下是:zend_extension_debug=path,window中載入的dll有兩種,一種文件名會帶有ts的後綴,這種要這要樣寫:zend_extension_ts=path另外一種就這樣:zend_extension=path,path一定要寫絕對路徑。雖然ts為何意我也不是很清楚,但是這些設置是一定不可以搞錯的。
設置好後重新運行php-cgi,然後重新訪問test.php,如果有xdebug的那一塊出現了,那麼就成功了.
當然這是一個很簡單的配置,只能讓你運行php,要想真正做成你需要的開發環境,還需要你根據自己的需要修改php和nginx的配置文件,這些配置內容很多,我自己也在學習中,就不好多講了.
另外有一點需要注意,php的配置文件在它的源碼包中有兩個:php.ini-dist和php.ini-recommended,分別是針對生成環境和開發環境的配置.你需要把其中一個改名為php.ini.重啟後查看phpinfo()的頁面,靠上的地方有一項”Loaded Configuration File”,它的值如果就是你的php.ini的路徑,那麼就沒問題了,如果不是話,就看看上面一項”Configuration File (php.ini) Path”,你把你的php.ini文件移到這個目錄下在重啟就可以了.因為php默認會在這個路徑下尋找php.ini的.當然你也可以在運行php-cgi的時候設置你的php.ini路徑,比如這樣:
php-cgi -b 3344 -c /home/jsckdao/php.ini
這樣就是把/home/jsckdao/php.ini這個文件作為配置文件了.
按鈕!!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309602.html
微信掃一掃
支付寶掃一掃