PHP环境的搭建及与nginx的集成

时间:2021-03-07 21:16:42

1、  去php官网下载最新稳定版(最新其实是7.0,为了兼容性,使用5.6.16)

wget http://cn2.php.net/get/php-5.6.16.tar.gz/from/this/mirror

2、  解压缩tar.gz包

tar vxzf php-5.6.16.tar.gz

3、  配置并构建 PHP。在此步骤您可以使用很多选项自定义 PHP,例如启用某些扩展等。 运行 ./configure --help 命令来获得完整的可用选项清单。 在本示例中,我们仅进行包含 PHP-FPM 和 MySQL 支持的简单配置。

cd ../php-5.6.16

./configure --enable-fpm --with-mysql

提示configure: error: xml2-config not found. Please check your libxml2 installation.

3.1、安装libxml2(一个支持使用xpath来处理xml文件的库)

apt-get install libxml2

apt-get install libxml2-dev

利用以上命令安装完软件包后可以利用以下命令来查看软件包的状态(确定是否安装成功)

dpkg -s libxml2-dev

也可以用如下命令(得到的结果是一样的):

dpkg-query -s libxml2-dev

软件安装好后,默认情况下,libxml2对应的头文件均放置在/usr/include/libxml2/libxml目录下,这一信息可利用如下两个命令查看(任一命令都能查看到相关信息)

dpkg -L libxml2-dev

xml2-config –cflags

libxml2的库文件放置在/usr/lib/i386-linux-gnu目录下,这一信息可利用如下两个命令查看(任一命令都能查看到相关信息)

dpkg -L libxml2-dev

xml2-config –libs

对应libxml2有一个工具,名字为xml2-config,xml2-config所在的目录为/usr/bin,其实这是一个shell脚本,关于xml2-config的详细信息可以通过如下命令来查看

man xml2-config

通过之后,进行make和make install

4、  创建配置文件,并将其复制到正确的位置。

cp php.ini-development /usr/local/php/php.ini

cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf

cp sapi/fpm/php-fpm /usr/local/bin

5、  需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击

将 php.ini 文件中的配置项 cgi.fix_pathinfo 设置为 0 。

vim /usr/local/php/php.ini

定位到 cgi.fix_pathinfo= 并将其修改为如下所示:

cgi.fix_pathinfo=0

6、  在启动服务之前,需要修改 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 服务:

/usr/local/bin/php-fpm

本文档未涵盖对 php-fpm 进行进一步配置的信息,如果您需要更多信息,请查阅相关文档。

7、  配置 Nginx 使其支持 PHP 应用:

vim /usr/local/nginx/conf/nginx.conf

修改默认的 location 块,使其支持 .php 文件:

location / {

root   html;

index  index.php index.html index.htm;

}

下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块, 取消默认的 PHP 配置块的注释,并修改为下面的内容:

location ~* \.php$ {

fastcgi_index   index.php;

fastcgi_pass    127.0.0.1:9000;

include         fastcgi_params;

fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

}

重启 Nginx。

sudo /usr/local/nginx/sbin/nginx -s stop

sudo /usr/local/nginx/sbin/nginx

扩展阅读:优化nginx的php配置

http://blog.jobbole.com/50121/

使用phpize为已编译安装php动态追加模块:

使用php的常见问题是:编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,别说,php还真有这样的功能。

  安装时没有追加gd库,结果现在需要gd库了,可以这样做。

  首先,要有与现有php完全相同的php压缩包。我用的是php-5.2.16.tar.gz。

  展开后进入里面的ext/gd目录

  然后执行/usr/local/bin/phpize,这是一个可执行的文本文件,要确保它在系统中

  如果没报错,会发现当前目录下多了一些configure文件。

  之后

  ./configure --with-php-config=/usr/local/bin/php-config

  注意要先确保/usr/local/bin/php-config存在。

  如果你的php安装路径不是默认的,要改。

  如果没有报错,则make,再make install ,然后它告诉你一个目录

  你把该目录下的gd.so拷贝到你php.ini中的extension_dir指向的目录中,

  修改php.ini,在最后添加一句extension=gd.so

  不幸的是,在执行phpize时报错,

  Cannot find autoconf. Please check your autoconf installation and the
  $PHP_AUTOCONF environment variable. Then, rerun this script.

  那这个也好办,安装autoconf和m4即可。(gd目录下会发现一个m4文件)

# cd /usr/src
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4..tar.gz
# cd m4-1.4./
# ./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
更简单的办法
# yum install m4
# yum install autoconf

接着继续安装gd,发现configure的时候报错, configure: error: png.h not found.

看来不得不安装gd的依赖库了,freetype ,jpegsrc,libpng。

1、下载安装freetype(一个字体引擎)

  wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.gz

  tar vxzf freetype-2.4.0.tar.gz

  cd freetype-2.4.0

  ./configure --prefix=/usr/local/freetype && make && make install

2、jpegsrc

  wget http://www.ijg.org/files/jpegsrc.v9a.tar.gz

  tar vxzf jpegsrc.v9a.tar.gz

  cd jpegsrc.v9a

  CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/jpeg && make && make install

  mkdir -p /usr/local/jpeg/include

  mkdir -p /usr/local/jpeg/lib

  mkdir -p /usr/local/jpeg/bin
  mkdir -p /usr/local/jpeg/man/man1

3、libpng

  wget http://jaist.dl.sourceforge.net/project/libpng/libpng16/1.6.19/libpng-1.6.19.tar.gz

  tar vxzf libpng-1.6.19.tar.gz

  cd libpng-1.6.19

  CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/libpng && make && make install

安装完之后,返回ext/gd目录,再执行

./configure --with-php-config=/usr/local/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng --with-freetype-dir=/usr/local/freetype
make && make install

接着把生成的gd.so放到扩展目录中,加到php.ini配置中。(注意这个配置文件的路径)

  

  

  关于phpize的详细介绍:

安装(fastcgi模式)的时候,常常有这样一句命令:/usr/local/webserver/php/bin/phpize
一、phpize是干嘛的?
phpize是什么东西呢?php官方的说明:
http://php.net/manual/en/install.pecl.phpize.php
phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块
比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize,通过以下几步工作。
二、如何使用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