centos 6.2 linux下安裝php5.6.6源碼
PHP在 5.3.3 之后已經把php-fpm並入到php的核心代碼中了。 所以php-fpm不需要單獨的下載安裝。
要想php支持php-fpm,只需要在編譯php源碼的時候帶上 --enable-fpm 就可以了
一:yum安裝php的依賴庫
yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison libtool-ltdl-devel libiconv libmcrypt mhash mcrypt pcre-devel openssl-devel freetype-devel libcurl-devel
二:下載 php5.6 源碼
wget http://cn2.php.net/distributions/php-5.6.6.tar.gz
tar -zxvf php-5.6.6.tar.gz
cd ./php-5.6.6/
三:php配置安裝
# 配置php的編譯參數
./configure --prefix=/usr/local/php --with-mysql --with-mysqli --with-pdo_mysql --with-iconv-dir --with-zlib --with-libxml-dir --enable-xml --with-curl --enable-fpm --enable-mbstring --with-gd --with-openssl --with-mhash --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-freetype-dir=/usr/lib64
# 開始編譯安裝
make
make install
然后就安裝到了 /usr/local/php 目錄下
四:配置php.ini和php-fpm
php.ini配置
首先我們需要配置的是php.ini這個文件
安裝目錄有2個文件:php.ini-development和php.ini-production
php.ini-production 線上版本使用
php.ini-development 開發版本使用
我們選擇development進行配置
# cp php.ini-development /usr/local/php/lib/php.ini
php-fpm配置
首先啟動php-fpm:
/usr/local/php/sbin/php-fpm
報錯了
ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
ERROR: FPM initialization failed
錯誤信息說是找不到php-fpm.conf
到php的配置目錄
cd /usr/local/php/etc
有一個php-fpm.conf.default的文件,cp復制
cp php-fpm.conf.default php-fpm.conf
編輯 php-fpm.conf
找到以下配置項, 配置如下
pid = run/php-fpm.pid user = www group = www
再次運行
/usr/local/php/sbin/php-fpm
報錯了:
ERROR: [pool www] cannot get uid for user 'www'
ERROR: FPM initialization failed
說www用戶不存在,那么建立www用戶和用戶組
groupadd www
useradd -g www www
再次啟動
/usr/local/php/sbin/php-fpm
沒有任何報錯,說明運行成功了
驗證是否成功
ps aux|grep php-fpm
出現了 php-fpm進程:
root 15448 0.0 0.2 210972 4856 ? Ss 16:10 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 15449 0.0 0.2 213056 4768 ? S 16:10 0:00 php-fpm: pool www
www 15450 0.0 0.2 213056 4768 ? S 16:10 0:00 php-fpm: pool www
root 15492 0.0 0.0 112648 964 pts/0 R+ 16:11 0:00 grep --color=auto php-fpm
五:加入開機啟動
開機啟動的配置文件是:/etc/rc.local
# vi /etc/rc.local
/usr/local/php/sbin/php-fpm # 添加進來
六:php-fpm的一些命令
我們在新安裝擴展后,是需要重新php-fpm的,已使擴展生效。
最簡單粗暴的重新php-fpm的方式是:
先找到php-fpm的進程號,kill 掉,再用/usr/local/php/sbin/php-fpm 這樣啟動。
其實還有更多溫和的方法,就是使用信號。
INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新打開日志文件
USR2 平滑重載所有worker進程並重新載入配置和二進制模塊
示例:
php-fpm 關閉: kill -INT `cat /usr/local/php/var/run/php-fpm.pid` php-fpm 重啟: kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
七:nginx配置解析php
nginx的配置安裝見前面文章:http://www.cnblogs.com/starlion/p/8875982.html
1、進入nginx目錄
cd /usr/local/nginx
2、編輯配置文件
vi ./conf/nginx.conf
在 server 下找到
location / { root html; index index.html index.htm index.php; # 加上 index.php }
去掉前面注釋 #
location ~ \.php$ { root /usr/local/nginx/html; # 絕對路徑配置到html下 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #驗證時候解析php出錯,/scripts需要換成$document_root, 下面有解釋
include fastcgi_params;
}
3、然后平滑重啟nginx
./sbin/nginx -s reload
沒有報錯,說明重啟成功
八:驗證php是否配置成功
在 /usr/local/nginx/html 目錄下編輯 vi index.php
<?php echo phpinfo(); ?>
在瀏覽器上輸入 http://ip:80/index.php 然后出現了錯誤
File not found
查看nginx的日志,配置日志在 ./logs 目錄下
首先查看access.log 日志,出現了如下錯誤信息
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: ***.107.***.138, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "1**.24.**.115"
在看 error.log 日志信息出現了下面信息
[error] 16403#0: *42 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: ***.107.***.138, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "1**.24.**.115"
根據上面的 FastCGI sent in stderr: "Primary script unknown"
這是在配置nginx解析php腳本時候出現了錯誤
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
修改成如下方式($document_root):
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
$document_root 代表當前請求在root指令中指定的值:
修改之后重啟nginx
./sbin/nginx -s reload
重新刷新瀏覽器,出現如下圖所示,說明配置成功了