nginx下安装PHP发生问题的逐步解决

xcguoyu 2016-04-17

[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

php安装openssl 扩展

[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

相关推荐