使用 eAccelerator加速PHP代码的目的


Posted in PHP onMarch 16, 2007

使用 eAccelerator加速PHP代码 
eAccelerator 真是一个好东西(它的前身是truck-mmcache)。 
简单来讲它是一套配合PHP(支持PHP5)运作的缓存系统,通过共享内存或磁盘文件方式交换数据。 
它被广为使用的是PHP源码“编码”(不太贴切的称为“加密”)和缓存PHP执行的中间码以加速。关于 eA 的安装使用的文章已经很多而且也很详细了,这次我想推荐的是用它辅助程序设计缓存,它提供了一组API如下: 
是一个非常便捷而又稳定的本机缓存实现方式,目前这部分设计似乎只支持于共享内存,所以只能用于 Unix -Like OS 了,windows的就没这个福气了。 
1. eaccelerator_put($key, $value, $ttl=0) 
  将 $value 以 $key 为键名存进缓存(php4下支持对像类型,看源码好像zend2里不支持了),$ttl 是这个缓存的生命周期,单位是秒,省略该参数或指定为 0 表示不限时,直到服务器重启清空为止。 
2. eaccelerator_get($key) 
  根据 $key 从缓存中返回相应的 eaccelerator_put() 存进去的数据,如果这项缓存已经过期或不存在那么返回值是 NULL 
3. eaccelerator_rm($key) 
  根据 $key 移除缓存 
4. eaccelerator_gc() 
  移除清理所有已过期的 key  
5. eaccelerator_lock($key) 
  为 $key 加上锁定操作,以保证多进程多线程操作时数据的同步。需要调用 eaccelerator_unlock($key) 来释放这个锁或等待程序请求结束时自动释放这个锁。 
  例如: 
  <?php 
    eaccelerator_lock("count"); 
    eaccelerator_put("count",eaccelerator_get("count")+1)); 
  ?> 
6. eaccelerator_unlock($key) 
  根据 $key 释放锁 
7. eaccelerator_cache_output($key, $eval_code, $ttl=0) 
  将 $eval_code 代码的输出缓存 $ttl 秒,($ttl参数同 eacclerator_put) 
   For Example: 
  <?php eaccelerator_cache_output('test', 'echo time(); phpinfo();', 30); ?> 
8. eaccelerator_cache_result($key, $eval_code, $ttl=0) 
  将 $eval_code 代码的执行结果缓存 $ttl 秒,($ttl参数同 eacclerator_put),类似 cache_output 
   For Example: 
  <?php eaccelerator_cache_result('test', ' time() . "Hello";', 30); ?> 
9. eaccelerator_cache_page($key, $ttl=0) 
  将当前整页缓存 $ttl 秒。 
  For Example: 
  <?php 
    eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30); 
    echo time(); 
    phpinfo(); 
  ?> 
10. eaccelerator_rm_page($key) 
  删除由  eaccelerator_cache_page() 执行的缓存,参数也是 $key 
______________________________________________ 
(作个简单例子看看它的威力,注意在 cli 模式下可能无效!) 
<?php
class test_cache {
  var $pro = 'hello';
  function test_cache() {
    echo "Object Created!<br>\n";
  }
  function func() {
    echo ', the world!';
  }
  function now($t) {
    echo date('Y-m-d H:i:s', $t);
  }
}
$tt = eaccelerator_get("test_tt");
if (!$tt)
{
  $tt = new test_cache;
  eaccelerator_put("test_tt", $tt);
  echo "no cached!<br>\n";
}
else {
  echo "cached<br>\n";
}
echo $tt->pro; 
$tt->func();
$tt->now(time() + 86400);
?>
以下是网友的评论:
--------------------------------------------------------------------------------
showsa 回复于:2005-12-31 19:51:56win 也支持! http://www.arnot.info/eaccelerator/
 信天翁 回复于:2006-01-04 17:17:37最新版 eAccelerator 0.9.4-rc1 中有个小bug 表现为 /var/log/httpd/error_log 出现大量 [warn] (32)Broken pipe: write pipe_of_death 的错误信息 解决方法 修改 debug.c 文件 ----------------------------------------------- /**  * Close the debug system.  */ void ea_debug_shutdown () {     fflush (F_fp);     // 源语句, 关闭文件时没有检测文件句柄     //fclose (F_fp);    //改为     if (F_fp != stderr) fclose (F_fp);      F_fp = NULL; }
soichiro 回复于:2006-01-10 22:01:21eAccelerator/truck-mmcache太恐怖了,我现在有两个负载很高的系统,一个基于Drupal,另一个基于PostNuke,用了eAccelerator后,Drual速度提升100倍,PostNuke提升10倍,PostNuke提升比较少是因为它本身就很快.
 wangyih 回复于:2006-04-08 10:48:11和使用squid比怎么样
 showsa 回复于:2006-04-08 23:23:44怎么去和 squid去比啊  不一样的东西 squid是缓存页面运行结果 如果不是实时显示,squid肯定强了 但是论坛之类的,squid就不行了,用eaccelerator /memcache 可以很大程度上提升效率
 Yarco 回复于:2006-04-09 10:00:43但是据说和encode过的代码有冲突啊... 不知道现在的和zend的兼容性如何?

PHP 相关文章推荐
PHP函数常用用法小结
Feb 08 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 PHP
PHP框架性能测试报告
May 08 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 PHP
PHP的开发框架的现状和展望
Mar 16 #PHP
用header 发送cookie的php代码
Mar 16 #PHP
PHP实现多服务器session共享之NFS共享的方法
Mar 16 #PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 #PHP
不错的一篇面向对象的PHP开发模式(简写版)
Mar 15 #PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 #PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 #PHP
You might like
打造计数器DIY三步曲(中)
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
python 整数越界问题详解
2019/06/27 Python
python把转列表为集合的方法
2019/06/28 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
美国知名艺术画网站:Art.com
2017/02/09 全球购物
软件工程师岗位职责
2013/11/16 职场文书
4s店机修工岗位职责
2013/12/20 职场文书
小学三年级学生评语
2014/04/22 职场文书
促销活动总结报告
2014/04/26 职场文书
员工保密承诺书
2014/05/28 职场文书
2015国庆节宣传语
2015/07/14 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
python3操作redis实现List列表实例
2021/08/04 Python