作者: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(最终版)
阅读(1403) | 评论(0) | 转发(0) |