编译安装php-5.5.30和xcache
前言
在之前的篇幅中我们曾谈到过,apache与php交互的方式主要有三种,在这里我们使用到的方式就是将php编译成apache的一个模块,这样apache与php的交互直接在apache内部运行,不需要创建额外的进程。
一、编译安装php与配置
1、在编译前先解决依赖关系
安装如下软件
# yum -y groupinstall "X Software Development"
如果想让php支持mcrypt扩展功能。还需要安装如下两个rpm包
libmcrypt-2.5.7-5.el5.i386.rpm
libmcrypt-devel-2.5.7-5.el5.i386.rpm
2、编译安装php-5.5.30
# tar xf php-5.5.30.tar.bz2
# cd php-5.5.30
//如果php使用mysqlnd这种驱动来访问mysql,那么使用如下指令进行编译:
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd 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
//如果php使用libmysql这种驱动来访问mysql,那么使用如下指令进行编译:
# ./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
# make test
# make intall
php编译时的说明:
1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd驱动程序从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
3、编译php时,建议使用mysqlnd这种驱动程序来访问mysql,因为mysqlnd驱动具有如下优点:
(1)、mysqlnd更容易编译,它是php源码树的一个组成部分。
(2)、mysqlnd与php内部机制结合紧密,是优化的mysql驱动程序。
(3)、mysqlnd更节省内存,从测试结果来看,比传统的mysql扩展节省40%的内容。
(4)、mysqlnd更快。
(5)、mysqlnd提供了更加丰富的性能统计功能。
(6)、libmysql驱动是由mysql AB公司研发(已被oracle收购),而mysqlnd是由Zend所研发,采用的是php开源协议,这样可以避免版权纠纷。
3、为php提供配置文件
# cp php.ini-production /etc/php.ini
4、 编辑apache配置文件httpd.conf,使apache支持php
# vim /etc/httpd/httpd.conf
1、添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
2、定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html
5、创建授权用户
登录到mysql数据库上创建授权用户
# mysql -uroot -proot
mysql> grant all on *.* to 'myphp'@'192.168.108.251' identified by 'mypass';
mysql> flush privileges;
6、创建测试脚本
在apache服务器上的/usr/local/apache/htdocs目录下创建index.php文件,就可以测试是否安装成功
在这里我写了一个php脚本
<?php
$conn=mysql_connect('192.168.108.251','myphp','mypass');
if ($conn)
echo "Success...";
else
echo "Failure...";
mysql_close();
phpinfo();
?>
说明:192.168.108.251是mysql数据库服务器ip。
这个脚本既可以测试php是否连接成功,还可以测试mysql是否连接上去了。
而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。
# service httpd24 restart
在测试时,如果phpinfo页面中的mysql这部分内容Client API version显示的是mysqlnd,则表示mysqlnd安装成功了。
编译php时出现的隐式错误:
在编译php时,编译过程中一直没有什么问题,而且编译完成之后,php的phpinfo页面也可以显示出来。但是无论怎么样,php与mysql连接不上,当时php用的5.4的版本,mysql用的还是mysql5.5的版本,但是无论怎么样,php始终连接不上。最后我查看httpd的错误日志(由于php被编译成httpd的模块,那么就是httpd的一部分呢,所以查看的就是httpd的日志),在错误日志中,出现如下行信息:
mysql_connect(): Headers and client library minor version mismatch. Headers:50173 Library:50528
这一行信息说的是mysql client api版本和mysql header的版本不兼容,可能是由于php的版本过低造成的,解决办法就是:我将php的版本换成5.5.30的,然后启用的驱动程序为mysqlnd,就这样,编译完成之后,php可以正常访问mysql了。
7、安装discuz和phpmyadmin程序
编译httpd的主配置文件/etc/httpd24/httpd.conf,并启用如下行:
Include /etc/httpd24/extra/httpd-vhosts.conf //这是虚拟机的配置文件
然后在编辑这个配置文件
# /etc/httpd24/extra/httpd-vhosts.conf
添加如下内容
<VirtualHost 192.168.108.251:80> //这个是discuz的站点
servername www.a.com
CustomLog logs/access.a.log common
ErrorLog logs/error.a.log
DocumentRoot "/www/a/com"
<Directory "/www/a/com">
options none
allowoverride none
require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.108.251:80> //这个是phpmyadmin的站点
servername www.b.com
CustomLog logs/access.b.log common
ErrorLog logs/error.b.log
DocumentRoot "/www/b/com"
<Directory "/www/b/com">
options none
allowoverride none
require all granted
</Directory>
</VirtualHost>
然后创建相关的目录
# mkdir -pv /www/{a,b}/com
解压Discuz和phpMyAdmin程序
# unzip Discuz_X3.2_SC_GBK.zip
# mv upload /www/a/com
# unzip phpMyAdmin-4.5.1-all-languages.zip
# mv phpMyAdmin-4.5.1-all-languages /www/b/com/phpadmin
8、测试
分别对discuz程序和phpmyadmin程序进行测试访问
测试discuz程序是否可以正常访问
访问http://www.a.com/upload
第一次安装时,还需要修改好多文件的权限,根据安装步骤的提示,一个一个的修改权限即可。然后,不出意外的话,discuz这个程序就可以安装成功。安装成功的界面如下:
在测试phpmyadmin程序前,需要将config.sample.inc.php这个文件修改为config.inc.php。如
# cd /www/b/com/phpadmin
mv config.sample.inc.php config.inc.php
编辑config.inc.php这个文件,并添加如下内容:
$cfg['Servers'][$i]['host'] = '192.168.108.251'; //指定mysql客户端的地址
//如下几行用来设置存储时的一些参数
$cfg['Servers'][$i]['controluser'] = 'myphp';
$cfg['Servers'][$i]['controlpass'] = 'mypass';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; //指定存储的数据库
$cfg['Servers'][$i]['controlhost'] = '192.168.108.251'; //指定mysql服务端地址。
访问http://www.b.com/phpadmin,显示界面如下:
登录成功后的界面显示如下:
说明:phpmyadmin是一个mysql图形化的管理工具,在命令行界面下的操作,都可以在图像界面下进行操作,如增删查改等操作。
二、编译安装xcache
XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载.
目前最新稳定版本为xcache-3.2,它支持php5.1~5.6,在这里我使用的xcache-3.2.0版本的
1、编译安装xcache-3.2.0
# tar xf xcache-3.2.2.tar.gz
# cd xcache-3.2.0
# /usr/local/php/bin/phpize
(上行命令主要是执行预编译环境,让php支持扩展功能)
# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
# make && make install
安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/
#注意这一行非常关键,尤其是后面的一段字符串,他要添加到某个文件中去的。
2、将xcache.ini文件复制到/etc/php.d/目录下:
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d
说明:xcache.ini文件在xcache的源码目录中。
接下来编辑/etc/php.d/xcache.ini,找到extension开头的行,修改为如下行:
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so
注意:如果xcache.ini文件中有多条extension指令行,要确保此新增的行排在第一位。
安装完成之后,在重启httpd服务,然后再使用浏览器访问index.php文件就可以看到xcache功能了。
本文出自 “linux学习之路” 博客,谢绝转载!