Centos6下编译安装PHP
一、以模块化编译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>