Chinaunix首页 | 论坛 | 博客
  • 博客访问: 519441
  • 博文数量: 99
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1110
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-01 09:01
文章分类

全部博文(99)

文章存档

2010年(4)

2009年(86)

2008年(9)

我的朋友

分类: BSD

2009-05-18 09:06:52

作者:yong_king,个人博客:http://onmp.cublog.cn,本文欢迎转载!

注:本文为OpenBSD4.4+eAccelerator0.9.5.3+ZendOptimize3.3的更新版本,仅对个别内容进行了更新。

OpenBSD以其固有的简洁、安全、高效、稳定,正越来越赢得广大用户的喜爱。但正是因为OpenBSD对安全的近乎偏执的追求,使得很多的软件的安装都会有所不同。

本文就将要讲解在OpenBSD 4.5环境下,安装eAccelerator 0.9.5.3这个PHP加速软件和Zend Optimizer 3.3.0a这个PHP解码软件的方法。

注意,在安装前请su成root。

一、系统环境的准备

这里只介绍基本的PHP环境的安装,其他需要的软件请自行安装。

export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.5/packages/i386/
pkg_add wget autoconf-2.62 unzip libtool m4 php5-core php5-fastcgi
(注意上面autoconf的版本,请根据系统环境需求自行修改)

OpenBSD会自动处理好软件的依赖关系,自动安装必须的软件和库等等。没错,OpenBSD下安装软件就是这么简单!

二、修改eAccelerator 0.9.5.3源码,适应OpenBSD环境

cd /tmp
wget
unzip eaccelerator-0.9.5.3.zip
cd eaccelerator-0.9.5.3
vi +110 eaccelerator.h

敲入2dd删除110和111两行内容,删除的内容在下面:

        typedef intptr_t;
        #define _INTPTR_T_DEFINED

删完后插入下面的内容:

  typedef int intptr_t;
  #define _INTPTR_T_DEFINED
#else
#  ifdef HAVE_STDINT_H
#    include
#  elif HAVE_INTTYPES_H
#    include
#  endif

完成后这段的内容应该是:

if !defined(_INTPTR_T_DEFINED) && ZEND_WIN32
  typedef int intptr_t;
  #define _INTPTR_T_DEFINED
#else
#  ifdef HAVE_STDINT_H
#    include
#  elif HAVE_INTTYPES_H
#    include
#  endif
#endif

保存退出。

vi +2094 eaccelerator.c

敲入16dd将这行及接下来的16行删除,删除的内容在下面:

        }
  
        /*
         * Initialization on first call, comes from eaccelerator_zend_startup().
         */
        if (eaccelerator_global_function_table.nTableSize == 0) {
                zend_function tmp_func;
                zend_class_entry tmp_class;
  
                zend_hash_init_ex(&eaccelerator_global_function_table, 100, NULL, NULL, 1, 0);
                zend_hash_copy(&eaccelerator_global_function_table, CG(function_table), NULL,
                        &tmp_func, sizeof(zend_function));
  
                zend_hash_init_ex(&eaccelerator_global_class_table, 10, NULL, NULL, 1, 0);
                zend_hash_copy(&eaccelerator_global_class_table, CG(class_table), NULL,
                        &tmp_class, sizeof(zend_class_entry));

删完后跳到2516行,敲入8dd将这行及接下来的8行删除,删除的内容在下面:

  /*
   * HOESH: on apache restart there was some
   * problem with CG(class_table) in the latest PHP
   * versions. Initialization moved to eaccelerator_compile_file()
   * depends on the value below.
   */
  eaccelerator_global_function_table.nTableSize = 0;

保存退出。

至此,对代码的修改已经完成。

三、编译环境的设定

vi +103 /usr/local/bin/phpize

为autoconf加入版本号,将这两行改成:

  test -z "$PHP_AUTOCONF" && PHP_AUTOCONF=autoconf-2.62
  test -z "$PHP_AUTOHEADER" && PHP_AUTOHEADER=autoheader-2.62

注意此处为开始准备环境时安装的autoconf版本号,请根据系统情况自行修改。

保存退出。

好了,eAccelerator所需的编译环境已经全部妥当。

四、安装eAccelerator

接下来的过程就是官方的过程了,很简单:

phpize
./configure
make && make install

等到上面的步骤完成,然后要修改php.ini文件,将eAccelerator的设置加进去。

vi /var/www/conf/php.ini

跳到最后,加入下面的内容:

[eaccelerator]
extension="eaccelerator.so"
eaccelerator.shm_size="8"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

注 意:上面eaccelerator.shm_size="8"这行是指定eAccelerator所用缓存的大小,偶这里只指定了8M,你可以根据你的情 况自行修改。这个缓存最大可以设置到32M(修改/etc/sysctl.conf文件中kern.shminfo.shmmax的值可以再调大,注意是字节)。

保存退出,然后建立eAccelerator工作目录:

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

完成后用下面的命令验证安装是否成功:

php -v
php-fastcgi -v

如果在输出的部分能够看到包含eAccelerator的内容,就表示eAccelerator的安装基本成功。


注意:上面将eAccelerator的工作目录建立在/tmp中,而OpenBSD默认启动的时候会清空/tmp中的内容。

所以,请在/etc/rc.local启动脚本的最前面加入创建目录的命令,确保eAccelerator可以正常工作!

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

五、下载Zend Optimizer软件包

因为在zend.com下载需要注册,这里就不给出具体下载地址,可以自行用电邮地址注册,然后登录下载并上传到服务器临时目录中,下面的示例为/tmp目录。

cd /tmp
tar xzvf ZendOptimizer-3.3.0a-openbsd3.4-i386.tar.gz

六、检验并创立Zend Optimizer工作环境

不知何故,目前Zend Optimizer只有for OpenBSD 3.4的版本,由于OpenBSD版本变化的缘故,原来需要的一些库文件已经有了很大的变化,直接安装无法通过,会提示缺少库文件,那么就需要做下连接,将Zend Opitimizer指向新库。

运行下面的命令建立连接:

ln -s /usr/lib/libutil.so.11.0 /usr/lib/libutil.so.9.0
ln -s /usr/lib/libc.so.50.1 /usr/lib/libc.so.30.1
ln -s /usr/lib/libm.so.5.0 /usr/lib/libm.so.1.0

七、将正确的模块文件拷贝到PHP模块目录

所谓的模块文件,就是Zend Opitimizer压缩包中后缀为.so的文件,一共有两个:(注意,不是带_TS的两个!)


/tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/ZendExtensionManager.so
/tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/5_2_x_comp/ZendOptimizer.so

将 这两个文件拷贝到PHP模块目录中(OpenBSD默认为/var/www/lib/php/modules),注意不要改变文件名!:

cp /tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/ZendExtensionManager.so /var/www/lib/php/modules/
cp /tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/5_2_x_comp/ZendOptimizer.so /var/www/lib/php/modules/

八、在php.ini中加载Zend Opitimizer

需要注意的是,在php.ini文件中,为了避免冲突,Zend Optimizer加载的部分一定要在eAcceleratro的后面!

vi /var/www/conf/php.ini

跳到最后,加入下面这段:
[Zend]
zend_optimizer.optimization_level=0
zend_optimizer.version=3.3.0a
zend_extension=/var/www/lib/php/modules/ZendExtensionManager.so
zend_extension=/var/www/lib/php/modules/ZendOptimizer.so

注 意上面zend_optimizer.optimization_level=这行,是指加速(缓冲)代码的级别,可选值有:0(关 闭),1,3,15,1023(最大)。不过根据本人的简单测试,Zend Optimizer加速(缓冲)代码的作用并不是很明显,最大值1023也无甚效果。上面我们已经装上了eAccelerator这个PHP加速软件,为 了不影响速度,这里就用0关闭。

保存退出,命令行下输入php -v或php-fastcgi -v检验Zend Opitimizer是否安装正确,如果在输出的信息中有Zend Opitimizer的相关信息,则说明安装成功!


重启Web Server,就可以使用eAccelerator和Zend Optimizer了!


写在最后

OpenBSD软件包里面的PHP因为安全的关系,集成了suhosin这个补丁,而据说eAccelerator和suhosin不兼容,会导致内存泄漏。地址在下面,大家可以自行去看:


仅仅是需要PHP加速(缓存)代码的话,偶强烈推荐使用OpenBSD软件包中的pecl-APC,性能、兼容性和稳定性都比eAccelerator要好一些。偶并不推荐在OpenBSD环境下使用eAccelerator和Zend Optimizer的组合。除非你的PHP环境要求你必须支持Zend Optimizer!

用了eAccelerator以后,为了避免内存泄漏,临时的解决办法就是每隔一段时间用eaccelerator_clear()函数清空eAccelerator中缓存的内容。方法在下面(假定网站根目录是/var/nginx/html):

在php.ini文件中引用eAccelerator的最后加入:
eaccelerator.allowed_admin_path="/var/nginx/html/"
(或者用你网站的根目录替换上面的/var/nginx/html/部分)

完成后,关于eAccelerator的部分就如下示:

[eaccelerator]
extension="eaccelerator.so"

eaccelerator.shm_size="8"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.allowed_admin_path="/var/nginx/html/"

然后写一个清除缓存的PHP小程序:

vi /var/nginx/html/clear.php

很简单的,只有一行:



这就行了,在需要清理缓存的时候,就用浏览器打开即可!

PS. 上面的清除办法还不是智能的,需要手动运行。希望哪位大牛可以说个自动化的方法,每隔一小时自动清除cache中缓存的内容。偶在命令行下试了N久都不成 功,都无法清除cache中的内容,只有在浏览器中才可以!难道是权限的问题(偶的php-fastcgi是用www用户启动的)?

相关博文

[原创]OpenBSD.Nginx.MySQL.PHP.环境搭建手册[第一版]

[原创]OpenBSD.Nginx.MySQL.PHP环境搭建手册[第二版]

[原创]OpenBSD.Apache.MySQL.PHP环境搭建手册[第一版]

[原创]OpenBSD环境下eAccelerator、pecl-APC和Zend Optimizer的对比测试

OpenBSD环境下安装PHP加速软件eAccelerator的方法[原创]

OpenBSD环境下安装Zend Optimizer的通用万能方法![原创]

list(,$temp) leak with eacc+suhosin

OpenBSD 4.3 + eAccelerator 0.9.5.3 + Zend Optimizer 3.3.0a

[原创]OpenBSD4.4+eAccelerator0.9.5.3+ZendOptimize3.3

摸索了两天,终于搞定了OpenBSD 4.3和Zend Optimizer 3.3.0a(最终版)
阅读(1356) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~