一、以模块化编译PHP


下载PHP:

        http://cn2.php.net/distributions/php-5.6.33.tar.gz

编译与安装:

        在安装php之前要先要安装好Apache和mysql或mariadb数据库,再安装编译php所需要的组件,yum -y install bzip2-devel libmcrypt-devel libxml2-devel,完成之后将php包解压。进入解压目录php-xxx,然后编译安装php。

        ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts

        make -j 4 && make install

        编译安装好后查看/etc/httpd24/httpd.conf文件,搜索LoadModule到最后一行,查看php5_module模块是否开启。


选项注释:

        --enable-maintainer-zts                如果编译mpm的worker或event模式则必须加上这一句,prefork模式不用加。

        --prefix=/usr/local/php                 指定php的安装目录

        --with-mysql=/usr/local/mysql     指定mysql的安装所在目录,如果是默认系统程序包搜索路径则不用加上路径,或默认系统安装的则不需要指定目录了,自己能找到就行。

        --with-apxs2=/usr/local/apache24/bin/apxs             把php编译成php的模块,注意指定的apache目录要正确

        --with-openssl                  支持ssl功能

        --with-mysqli=/usr/local/mysql/bin/mysql_config    支持mysqli模块,用于mysql连接的接口

        --enable-mbstring            支持中文mbstring

        --with-freetype-dir           支持字体的格式

        --with-jpeg-dir                  支持jpeg图片处理

        --with-png-dir                   支持png图片处理

        --with-zlib                         支持压缩库

        --with-libxml-dir=/usr      支持处理xml文档

        --enable-xml                     启用xml文档处理功能

        --enable-sockets               支持php进行套接字通讯

        --with-mcrypt                    支持加密解密

        --with-config-file-path=/etc                     指定php配置文件位置

        --with-config-file-scan-dir=/etc/php.d     指定其他.in文件i配置

        --with-bz2                         支持bz2格式压缩


配置Apache支持PHP:

        打开apache的配置文件,vim /etc/httpd24/httpd.conf 进行如下修改。

        1、添加AddType application/x-httpd-php  .php 所有以.php结尾的文件识别为这种类型,会自动调用php模块处理此类文件。AddType application/x-httpd-php-source  .phps 另一种类型,同上。

        2、添加在DirectoryIndex后面添加index.php。

配置PHP:

        切换到解压编译的目录,复制php.ini-production文件到/etc/php.ini。然后重载httpd服务即可。使用/usr/local/apache24/bin/httpd -M 命令查看php5_module模块是否已经安装。

测试是否可用:

        打开DocumentRoot中定义的路径/usr/local/apache24/htdocs/在这个目录下新建index.php文件,并写入测试数据库的脚本代码,测试数据库是否可以连接正常。mysql_connect('127.0.0.1', '', ''); 测试连接正常后再用phpinfo();查看php的一些信息。


安装xcache:

        xcache是一款PHP的缓存器,PHP的扩展功能,可以提高PHP的性能,下载地址http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz  ,下载后解压,进入xcache-xxx目录,没有configure文件需要用php的phpize命令生成configure文件,这个文件在php的安装目录下的/usr/local/php/bin/phpize,生成后就可以编译xcache了。

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

配置xcache:

        编译安装好后会提示:Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/ 这个目录下有两个文件,其中一个叫xcache.so是作为php的扩展用的,需要将这项在php配置文件中添加,在xcache-xxx的编译目录下有一个xcache.ini的文件,将这个文件拷贝到/etc/php.d/目录中即可cp xcache.ini /etc/php.d/。

        然后编辑这个文件vim /etc/php.d/xcache.ini,编辑内容如下:

        extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/xcache.so

        xcache.admin.enable_auth = Off

        重启httpd服务service httpd24 restart,并在phpinfo()页面中查看是否有xcache这一项。


二、以独立服务fpm模式编译PHP


        lamp环境的工作模式有两种,一种是将php作为httpd服务的模块,另一种是将php作为单独的服务,php-fpm就是后者,这时php跟httpd服务不在同一节点。php以fpm方式工作时,它不会被编译成httpd的模块,因此无须在httpd的配置文件中加载此模块。编译时不需要指定httpd服务的位置,但是要连接mysql服务器,所以要指定mysql安装的位置与启用相关驱动模块。当php与mysql不在同一个节点时,连接mysql的用户账号要有远程访问的权限。

编译与安装:

        将PHP编译成以fpm方式提供服务。先将包解压缩,如果之前有编译过的包将其删除再重新解压缩到当前目录下,然后进行如下编译,注意如果之前有编译过则要注意现在的目录要区别于之前的目录。

        ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc/php5 --with-config-file-scan-dir=/etc/php5.d --with-bz2

        make -j 4 && make install

        安装好后先将httpd原来的配置文件备份,切换到/etc/httpd24/目录,将httpd.conf备份为httpd.conf.bak2,再将原来的备份启用。


提供配置文件:

        新建目录/etc/php5.d目录,将编译目录下的php.ini-production 文件复制为/etc/php5/php.ini文件,作为php的配置文件。

提供服务脚本:

        将文件sapi/fpm/init.d.php-fpm 复制到/etc/rc.d/init.d/php-fpm,这个脚本是作为服务脚本用的,实现服务的开机启动。然后将脚本添加到系统服务 chkconfig --add php-fpm,再查看是否开机启动chkconfig --list php-fpm,看看3-5级别是否是on状态。


提供fpm的配置:

        将/usr/local/php5/etc/目录下的php-fpm.conf.default文件复制为php-fpm.conf文件,作为fpm的配置文件,打开这个文件vim php-fpm.conf 将pid 这一项修改为 pid = /usr/local/php5/var/run/php-fpm.pid,然后就可以启动服务了。service php-fpm start。使用ps aux | grep php-fpm查看是否有php-fpm进程。


配置httpd.conf:

        1、开启 mod_proxy.so 和 mod_proxy_fcgi.so 这两个模块,mod_proxy_fcgi.so这个模块是对fastCGI的实现,也是mod_proxy.so模块的扩充,所以两个模块都要开启。

        LoadModule proxy_module modules/mod_proxy.so

        LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so


        2、让httpd支持php,添加如下几项。

        AddType application/x-httpd-php  .php

        AddType application/x-httpd-php-source  .phps

        DirectoryIndex  index.php


        3、然后开启虚拟主机,在虚拟主机的配置项中添加如下两行,ProxyPassMatch的作用是把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000 后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

        ProxyRequests Off  关闭正向代理。

        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/$1

虚拟机的配置示例:

    <VirtualHost *:80>

        DocumentRoot "/www/"

        ServerName scriptjc.com

        ServerAlias www.scriptjc.com

        ProxyRequests Off

        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/$1

        <Directory "/www/">

            Options none

            AllowOverride none

            Require all granted

        </Directory>

    </VirtualHost>