免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2241 | 回复: 0
打印 上一主题 下一主题

[原创]OpenBSD4.5&eAccelerator0.9.5.3&ZendOptimize3.3 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-18 09:06 |只看该作者 |倒序浏览

                                                                                作者: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 http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zipunzip 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[color="blue"]-2.62
  test -z "$PHP_AUTOHEADER" && PHP_AUTOHEADER=autoheader[color="blue"]-2.62
[color="red"]注意此处为开始准备环境时安装的autoconf版本号,请根据系统情况自行修改。
保存退出。
好了,eAccelerator所需的编译环境已经全部妥当。
四、安装eAccelerator
接下来的过程就是官方的过程了,很简单:
phpize./configuremake
&& 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/eacceleratorchmod 0777 /tmp/eaccelerator
完成后用下面的命令验证安装是否成功:
php -vphp-fastcgi -v
如果在输出的部分能够看到包含eAccelerator的内容,就表示eAccelerator的安装基本成功。

注意:上面将eAccelerator的工作目录建立在/tmp中,而OpenBSD默认启动的时候会清空/tmp中的内容。
所以,请在/etc/rc.local启动脚本的最前面加入创建目录的命令,确保eAccelerator可以正常工作!
mkdir /tmp/eacceleratorchmod 0777 /tmp/eaccelerator
五、下载Zend Optimizer软件包
因为在zend.com下载需要注册,这里就不给出具体下载地址,可以自行用电邮地址注册,然后登录下载并上传到服务器临时目录中,下面的示例为/tmp目录。
cd /tmptar 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.0ln -s /usr/lib/libc.so.50.1 /usr/lib/libc.so.30.1ln -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
[color="red"]需要注意的是,在php.ini文件中,为了避免冲突,Zend Optimizer加载的部分一定要在eAcceleratro的后面!
vi /var/www/conf/php.ini
跳到最后,加入下面这段:
[Zend]zend_optimizer.optimization_level=0zend_optimizer.version=3.3.0azend_extension=/var/www/lib/php/modules/ZendExtensionManager.sozend_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不兼容,会导致内存泄漏。地址在下面,大家可以自行去看:
http://groups.google.com/group/e ... ad/bf98b6c5eee9d69b
仅仅是需要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="[color="blue"]/var/nginx/html/"
(或者用你网站的根目录替换上面的[color="blue"]/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
很简单的,只有一行:
这就行了,在需要清理缓存的时候,就用浏览器打开http://xxx.xxx.xxx.xxx/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(最终版)
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/81136/showart_1931914.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP