编译安装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

编译安装LAMP之php-5.5.30和xcache-3.2.0_编译安装php-5.5.28和xcach

第一次安装时,还需要修改好多文件的权限,根据安装步骤的提示,一个一个的修改权限即可。然后,不出意外的话,discuz这个程序就可以安装成功。安装成功的界面如下:

编译安装LAMP之php-5.5.30和xcache-3.2.0_编译安装php-5.5.28和xcach_02

 

 

在测试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,显示界面如下:

编译安装LAMP之php-5.5.30和xcache-3.2.0_编译安装php-5.5.28和xcach_03

 

登录成功后的界面显示如下:

编译安装LAMP之php-5.5.30和xcache-3.2.0_编译安装php-5.5.28和xcach_04

 

说明: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功能了。