nginx下安装PHP发生问题的逐步解决
[root@iZ23e06nkpkZ php-5.6.20]# ./configure --enable-fpm --with-mysql
configure: error: xml2-config not found. Please check your libxml2 installation.
[root@iZ23e06nkpkZ php-5.6.20]# rpm -qa |grep libxml2
libxml2-python-2.7.6-20.el6_7.1.x86_64
libxml2-2.7.6-20.el6_7.1.x86_64
重新安装libxml2和libxml2-devel包, yum安装的时候发现新版本会提示更新,需要更新的可以更新
[root@iZ23e06nkpkZ php-5.6.20]# yum install libxml2
[root@iZ23e06nkpkZ php-5.6.20]# yum install libxml2-devel
[root@iZ23e06nkpkZ php-5.6.20]# ./configure --enable-fpm --with-mysql
[root@iZ23e06nkpkZ php-5.6.20]# make
[root@iZ23e06nkpkZ php-5.6.20]# make install
安装完成之后,
把安装目录下的相关信息复制到指定地方
[root@iZ23e06nkpkZ php-5.6.20]#cp php.ini-development /usr/local/lib/php.ini
注意:php官网上的Unix 系统下的 Nginx 1.4.x安装手册写的是 /usr/local/php/php.ini是错误的。
实际上phpinfo看到的Configuration File (php.ini) Path /usr/local/lib ,会导致php.ini加载不到。
[root@iZ23e06nkpkZ php-5.6.20]#cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
[root@iZ23e06nkpkZ php-5.6.20]#cp sapi/fpm/php-fpm /usr/local/bin
需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击。
编辑php.ini
[root@iZ23e06nkpkZ php-5.6.20]#vim /usr/local/php/php.ini
修改cgi.fix_pathinfo=0
注2016-5-1:如果cgi.fix_pathinfo=0的话,就不能用pathinf功能了,thinkphp的rewrite
和U方法会出错,
http://192.168.1.1/weiphp/index.php?s=da会变成http://192.168.1.1.php?s=da
所以只能改成cgi.fix_pathinfo=1
在启动服务之前,需要修改 php-fpm.conf 配置文件,确保 php-fpm 模块使用 www-data 用户和 www-data 用户组的身份运行。
vim /usr/local/etc/php-fpm.conf
找到以下内容并修改:
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data
创建php-fpm脚本。从安装目录复制init.d.php-fpm.in
# cp <php-5.3.3-source-dir>/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod 755 /etc/init.d/php-fpm
然后就可以
#service php-fpm start|restart|stop这样启动php-fpm了。
配置nginx.conf
/etc/nginx/conf.d/default.conf
为了能够使用thinkphp的pathinfo。
修改default.conf
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
#if (!-e $request_filename) {
# rewrite ^/(.*)$ /index.php/$1 last;
# break;
#}
}
//因为部署了多个项目,所以加一个context的location的rewrite
location /weiphp/ {
root /usr/share/nginx/html;
index index.html index.htm index.php;
if (!-e $request_filename){
rewrite ^/weiphp/(.*)$ /weiphp/index.php?s=$1 last;
break;
}
}
location ~ \.php/?.*$ {
root /usr/share/nginx/html; //一开始这个地方没有加root /usr/share/nginx/html一直报404错误,找不到php文件。
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
#include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
#fastcgi_param SCRIPT_FILENAME /scripts$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
#fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$real_script_name;
fastcgi_param PATH_INFO $path_info;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
#include fastcgi_params;
}
找不到php的错误。因为$document_root 的参数是由root html那一行定义的,默认是在/etc/nginx/html/ 所以把 html换成站点根目录就正常了。
其实也可以在fastcgi_params里配置。
查找文件。
[root@iZ23e06nkpkZ conf.d]# find /. -name "fastcgi*"
/./etc/nginx/fastcgi_params
用phpize安装扩展
[root@iZ23e06nkpkZ conf.d]# find /. -name "phpize"
/./usr/local/bin/phpize
当php编译完成后,php的bin目录下会有phpize这个脚本文件。在编译你要添加的扩展模块之前,执行以下phpize就可以了;
比如现在想在php中加入memcache扩展模块:我们要做的只是如下几步
————————————————————————
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/webserver/php/bin/phpize
./configure –with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
————————————————————————
注意./configure 后面可以指定的是php-config文件的路径
这样编译就完成了,还需要做的是在php.ini文件中加入extension值
extension = “memcache.so”
---------------------------------------------------------
注意:Cannot find config.m4.
这个错误是一个很傻的错误,解压以后需要cd到文件夹,不然phpize就会报错
动态编译PHP的memcache扩展库,在执行/usr/localphp/bin/phpize时出现了错误,
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable is set correctly and then rerun this script.
很明显缺少文件,需要安装。网上找了下资料。
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure && make && make install
# cd ../
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure && make && make install
然后执行以下命令进行安装
#/usr/local/php/bin/phpize
#./configure –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent –with-php-config=/usr/local/php/bin/php-config
#make && make install
[root@iZ23e06nkpkZ bin]# cd /home/php-5.6.20/ext/openssl/
[root@iZ23e06nkpkZ openssl]# ll
total 280
-rw-r--r-- 1 1000 1000 1279 Mar 31 07:35 config0.m4
-rw-r--r-- 1 1000 1000 532 Mar 31 07:35 config.w32
-rw-r--r-- 1 1000 1000 65 Mar 31 07:35 CREDITS
-rw-r--r-- 1 1000 1000 151210 Mar 31 07:35 openssl.c
-rw-r--r-- 1 1000 1000 4664 Mar 31 07:35 openssl.dsp
-rw-r--r-- 1 1000 1000 4804 Mar 31 07:35 openssl.mak
-rw-r--r-- 1 1000 1000 4311 Mar 31 07:35 php_openssl.h
-rw-r--r-- 1 1000 1000 11104 Mar 31 07:35 README
drwxr-xr-x 2 1000 1000 12288 Mar 31 07:35 tests
-rw-r--r-- 1 1000 1000 73397 Mar 31 07:35 xp_ssl.c
[root@iZ23e06nkpkZ openssl]# /usr/local/bin/phpize
Cannot find config.m4.
Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module
把config0.m4复制成config.m4
[root@iZ23e06nkpkZ openssl]# ./configure --with-php-config=/usr/local/bin/php-config
报错查了一下是没有openssl-dev类库。
configure: error: Cannot find OpenSSL's <evp.h>
通过yum 安装openssl-devel
[root@iZ23e06nkpkZ openssl]# yum install openssl-devel
然后重新运行
[root@iZ23e06nkpkZ openssl]# ./configure --with-php-config=/usr/local/bin/php-config
[root@iZ23e06nkpkZ openssl]# make
[root@iZ23e06nkpkZ openssl]# make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
编辑/usr/local/lib/php.ini 加上extension=openssl.so
php安装gd库扩展
[root@iZ23e06nkpkZ gd]#cd /home/php-5.6.20/ext/gd
[root@iZ23e06nkpkZ gd]# yum install freetype
[root@iZ23e06nkpkZ gd]# yum install libpng* //如果不安装libpng的话,gd库编译的时候会报 configure: error: png.h not found.的错误
[root@iZ23e06nkpkZ gd]#/usr/local/bin/phpize
[root@iZ23e06nkpkZ gd]#./configure --with-php-config=/usr/local/bin/php-config
[root@iZ23e06nkpkZ gd]# make && make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
Installing header files: /usr/local/include/php/
编辑/usr/local/lib/php.ini 加上extension=gd.so
php安装pdo_mysql扩展
[root@iZ23e06nkpkZ pdo_mysql]# pwd
/home/php-5.6.20/ext/pdo_mysql
[root@iZ23e06nkpkZ pdo_mysql]#
[root@iZ23e06nkpkZ pdo_mysql]# /usr/local/bin/phpize
[root@iZ23e06nkpkZ pdo_mysql]# ./configure --with-php-config=/usr/local/bin/php-config
[root@iZ23e06nkpkZ pdo_mysql]# make
[root@iZ23e06nkpkZ pdo_mysql]# make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
编辑/usr/local/lib/php.ini 加上extension=pdo_mysql.so
[root@iZ23e06nkpkZ mbstring]# pwd
/home/php-5.6.20/ext/mbstring
[root@iZ23e06nkpkZ mbstring]# ./configure --with-php-config=/usr/local/bin/php-config
[root@iZ23e06nkpkZ mbstring]# make
[root@iZ23e06nkpkZ mbstring]# make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
Installing header files: /usr/local/include/php/
编辑/usr/local/lib/php.ini 加上extension=mbstring.so
thinkphp的verify的图像不显示出来。是因为GD库里没有freetype的支持。
重新编译安装GD库用以支持freetype,jpeg等。
之前安装GD扩展的时候用的默认编译方式是不带jpeg,freetype等支持的。
[root@iZ23e06nkpkZ gd]# pwd
/home/php-5.6.20/ext/gd
[root@iZ23e06nkpkZ gd]# ./configure --with-php-config=/usr/local/bin/php-config
先yum安装freetype* 和 libjpeg*
[root@iZ23e06nkpkZ gd]# yum install freetype* libjpeg*
然后用rpm -qa|grep jpeg和rpm -ql libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64找出libjpeg的安装位置。
freetype也一样。
[root@iZ23e06nkpkZ gd]# rpm -qa|grep jpeg
libjpeg-turbo-static-1.2.1-3.el6_5.x86_64
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
libjpeg-turbo-1.2.1-3.el6_5.x86_64
[root@iZ23e06nkpkZ gd]# rpm -ql libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
/usr/include/jconfig.h
/usr/include/jerror.h
/usr/include/jmorecfg.h
/usr/include/jpeglib.h
/usr/lib64/libjpeg.so
/usr/share/doc/libjpeg-turbo-devel-1.2.1
/usr/share/doc/libjpeg-turbo-devel-1.2.1/coderules.txt
/usr/share/doc/libjpeg-turbo-devel-1.2.1/example.c
/usr/share/doc/libjpeg-turbo-devel-1.2.1/jconfig.txt
/usr/share/doc/libjpeg-turbo-devel-1.2.1/libjpeg.txt
/usr/share/doc/libjpeg-turbo-devel-1.2.1/structure.txt
[root@iZ23e06nkpkZ gd]#
准备重新编译GD库,先清除一下之前的编译。
[root@iZ23e06nkpkZ gd]# make clean
[root@iZ23e06nkpkZ gd]# /usr/local/bin/phpize
指定freetype和libjpeg的安装路径
[root@iZ23e06nkpkZ gd]# ./configure --with-php-config=/usr/local/bin/php-config --with-jpeg-dir=/usr/lib64/ --with-freetype-dir=/usr/lib64/
[root@iZ23e06nkpkZ gd]# make && make install
重新启动php-fpm和nginx。
[root@iZ23e06nkpkZ gd]# service php-fpm restart
[root@iZ23e06nkpkZ gd]# service nginx restart
然后就发现phpinfo里gd库支持libjpeg和freetype了。
[root@iZ23e06nkpkZ curl]# pwd
/home/php-5.6.20/ext/curl
[root@iZ23e06nkpkZ curl]# yum install libcurl*
[root@iZ23e06nkpkZ curl]# /usr/local/bin/phpize
[root@iZ23e06nkpkZ curl]# ./configure --with-php-config=/usr/local/bin/php-config
[root@iZ23e06nkpkZ curl]# make && make install
编辑/usr/local/lib/php.ini 加上extension=curl.so