当前位置: 代码迷 >> PHP >> eAccelerator 配备(PHP代码加速器)
  详细解决方案

eAccelerator 配备(PHP代码加速器)

热度:473   发布时间:2012-09-05 15:19:35.0
eAccelerator 配置(PHP代码加速器)


  eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍;

?

首先您要安装好PHP,然后再来编译安装 eaccelerator,过程如下。
我们从官方下的版本是 eaccelerator-0.9.5.2.tar.bz2   
编译安装;   
# tar xvf eaccelerator-0.9.5.2.tar.bz2   
# cd cd eaccelerator-0.9.5.2   
# export PHP_PREFIX="/usr"   
# $PHP_PREFIX/bin/phpize   
# ./configure \   --enable-eaccelerator=shared \   --with-php-config=$PHP_PREFIX/bin/php-config   
# make   
# make install   
注:通过export 来设置php所在的安装路径变量,我的PHP是安装在/usr目录下,系统用redhat。其它系统如果默认安装也大体差不多;如果不一样,就自己指定一下;   
完成安装后,eaccelerator.so模块位于 /usr/lib/php/extensions目录中,您的系统如果和我不一样,您自己应该安装在哪了;  # echo "/usr/lib/php/extensions" > /etc/ld.so.conf   
# ldconfig   注:更新动态链接库地址;   
修改配置文件;   
我们首先要修改;php.ini,然后重启Apache;   
在php.ini文件中,加入;
zend_extension="/usr/lib/php/extensions/eaccelerator.so" 注:模块的具体位置;   
eaccelerator.shm_size="16" 注:共享内存大小;   
eaccelerator.cache_dir="/home/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"   注:其中,模块的具体位置必须正确,以您的系统为准;共享内存大小可以自己调整,感觉16M还是可以的,根据服务器的情况,你自己调一下。
缓存目录可以自己指定,我们在这里指定的是 /home目录上的 eaccelerator 目录,如果没有,自己创建一个;权限是0777;
以上的配置是把 eaccelerator 做为 Zend 的扩展模块来编译的办法。如果您的PHP是用安装模式编译的,要把 zend_extension改为zend_extension_ts 。
如果您是把 eaccelerator 做为 PHP的一个扩展,要用下面的配置 ;   
extension="eaccelerator.so"   
eaccelerator.shm_size="16"   
eaccelerator.cache_dir="/home/eaccelerator"   
eaccelerator.enable="1"   
eaccelerator.optimizer="1"   
eaccelerator.check_mtime="1"   
是不是生效了,您要查看 /home/eaccelerator 目录中,当Apache服务器启动了,你随便点几个页面,如果在这个目录中,出现文件了。那就是生效了。如果没任何文件,就要找原因了 ……   这两个配置文件,是不是管用。要你自己根据情况来修改。
# mkdir /home/eaccelerator
# chmod 777 /home/eaccelerator   注:创建缓存目录池,权限是777

?

?


eaccelerator.shm_size="32"

  eAccelerator 可以使用的共享内存的数量 (以兆为单位) . "0" 是指操作系统的默认值. 默认值是 "0".可根据服务器的实际情况来调整,16,32,64,128都是可以的。

  eaccelerator.cache_dir="/home/php/tmp"

  这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内容以及用户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 "/tmp/eaccelerator".

  eaccelerator.enable="1"

  开启或关闭 eAccelerator。"1" 为开启,"0" 为关闭。默认值为 "1"。

  eaccelerator.optimizer="1"

  启或关闭内部优化器,可以提升代码执行速度。"1" 为开启,"0" 为关闭。默认值为 "1"。

  eaccelerator.check_mtime="1"

  打开或者关闭 PHP 的文件修改检查. "1" 是指打开, "0" 是指关闭. 如果您在修改以后重新编译 PHP 的文件,那么您应当设置为 "1". 默认值是 "1".

  eaccelerator.debug="0"

  开启或关闭调试日志记录。"1" 为开启,"0" 为关闭。默认值为 "0"。会将缓存命中得记录写入日志。

  eaccelerator.filter=""

  判断哪些 PHP 文件必须缓存。您可以指定缓存和不缓存的文件类型(如 "*.php *.phtml"等)

  如果参数以 "!" 开头,则匹配这些参数的文件被忽略缓存。默认值为 "",即,所有 PHP 文件都将被缓存。

  eaccelerator.shm_max="0"

  当使用 " eaccelerator_put() " 函数时禁止其向共享内存中存储过大的文件。该参数指定允许存储的最大值,单位:字节 (10240, 10K, 1M)。"0" 为不限制。默认值为 "0"。

  eaccelerator.shm_ttl="0"

  当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在最后 "shm_ttl" 秒内没有存取的脚本缓存。默认值为 "0",即:不从共享内春中删除任何缓存文件。

  eaccelerator.shm_prune_period="0"

  当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于"shm_prune_period" 秒的缓存脚本。默认值为 "0",即:不从共享内春中删除任何缓存文件。

  eaccelerator.shm_only="0"

  允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认值为 "0",即:使用磁盘和共享内存进行缓存。

  eaccelerator.compress="1"

  允许或禁止压缩内容缓存。默认值为 "1",即:允许压缩。

  eaccelerator.compress_level="9"

  指定内容缓存的压缩等级。默认值为 "9",为最高等级。

  eaccelerator.keys = "disk_only"

  eaccelerator.session = "disk_only"

  eaccelerator.content = "disk_only"

  设置内容缓存的存放的地方,可以设置为:

  shm_and_disk 在共享缓存和硬盘(默认值)

  shm 默认存在共享内存,如果共享内存已满或大小超过 "eaccelerator.shm_max" 的值,就存到硬盘

  shm_only 只存放在共享内存

  disk_only 只存放在硬盘

  none 不缓存数据

  eaccelerator.allowed_admin_path = "/var/www/html/web/eaccelerator"

  这是控制面板的地址

  安装包里有个control.php,你把它复制到网站的任意目录,可以用它查看和管理,这个必须指定,否则查看缓存内容的时候会出错

  最后,来看一下我的 eAccelerator 设置

  ; eaccelerator

  [eaccelerator]

  zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"

  eaccelerator.shm_size="128"

  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="3600"

  eaccelerator.shm_prune_period="3600"

  eaccelerator.shm_only="0"

  eaccelerator.compress="1"

  eaccelerator.compress_level="9"

  eaccelerator.keys = "disk_only"

  eaccelerator.sessions = "disk_only"

  eaccelerator.content = "disk_only"

  eaccelerator.allowed_admin_path = "/var/www/html/web/eaccelerator"

  另外,再说下 eAccelerator 的安装

  # wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2

  # tar -jxvf eaccelerator-0.9.6.tar.bz2

  # cd eaccelerator-0.9.6

  # /usr/local/php/bin/phpize

  # ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config

  # make && make install


-------------------------------------
open_basedir 设置后不能访问的解决方法之一

Warning: Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): (.:/tmp/) in Unknown on line 0

Fatal error: Can’t load /XX/index.php, open_basedir restriction. in Unknown on line 0

出现了很多次这样的问题了,感觉都无从下手,总觉得与系统和php有关, 今天又出现了, 想来想去都觉得不奇怪, 后面开始重新编译php, php的扩展都没编译,发现设置open_basedir的时候,却没有出错^^^?? ,?? 从这个信息觉得有些可以利用的,把自己方案所需的扩展都安装进去,重启apache的时候,却发现有出现这个错误, 把php.ini中设置的扩展一个一个的关闭,开始排查,后面吧eaccelerator注释掉后,重启apache并没有出现错误, 定位问题出现eaccelerator, 在用google查了下,发现eaccelerator 0.9.6后的版本跟以前的有些改变,把open_basedir给限制了,这时我们要把限制去掉才行

下载eaccelerator 0.9.6后先不要安装,解包后找到eaccelerator.c这个文件,打开第1156行,这样的:
if (PG(open_basedir) && php_check_open_basedir(realname TSRMLS_CC)) {
修改成:
if (PG(open_basedir) && php_check_open_basedir(file_handle->filename TSRMLS_CC)) {

修改后在进行编译,就ok了