谁能给我讲讲APC的原理? APC没用过 一直用eaccelerator 和APC类似有选项设置更新时间 未到更新时间 就是源码有改变仍不生效在不设置更新时间的时候 监控过 每次都会读源码 估计通过获得更改时间来判断或者特征?介绍上说会缓存中间码 也就是说缓存从PHP文件转换到引擎所能执行的编码另外也有函数直接进行编码 能带来更稳定的加速 好像能变相加密 现在还没有人做逆向 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这东西应该是个非常优秀的缓存扩展,比zend等还要强一些,难道真的没人用吗? 最近正好研究到apc,我手里有一个ppt,自己做的,如果需要可以到这里下载!http://www.17dst.com/thread-5061-1-1.html有兴趣的一起交流! 其实关于你的问题,1. apc是靠自己设定的缓存过期时间,来实现定时更新缓存的!也就是不会检测到数据更新的!2. apc是存放在内存中,保持一个hash map 数组!也就是键和值对应的关系!通过加载文件的hash码作为键,来获取相应的缓存! 第一个问题,好像不是这样的,我做的一个php页面,当我修改源码是,刷新页面,发现页面已经更新成新的了。而我设的ttl是7200另外还有个问题,当url的参数改变时,缓存又将做什么? 看了一下apc的源码,头都大了,不过apc只是替换了zend的解析引擎,看下面的代码/* apc初始化过程 */int apc_module_init(int module_number TSRMLS_DC){ /* apc initialization */ apc初始化开始 */#if APC_MMAP apc_sma_init(APCG(shm_segments), APCG(shm_size)*1024*1024, APCG(mmap_file_mask));#else apc_sma_init(APCG(shm_segments), APCG(shm_size)*1024*1024, NULL);#endif apc_cache = apc_cache_create(APCG(num_files_hint), APCG(gc_ttl), APCG(ttl)); apc_user_cache = apc_cache_create(APCG(user_entries_hint), APCG(gc_ttl), APCG(user_ttl)); apc_compiled_filters = apc_regex_compile_array(APCG(filters)); /* override compilation */ 就是这里替换了zend解析引擎 */ old_compile_file = zend_compile_file; zend_compile_file = my_compile_file; REGISTER_LONG_CONSTANT("\000apc_magic", (long)&set_compile_hook, CONST_PERSISTENT | CONST_CS); APCG(initialized) = 1; /* apc初始化完成 */ return 0;}也就是弄明白了my_compile_file也就弄明白了你上面的问题,有事请来不及分析了,就先发上来吧my_compile_file见下面的代码 太长了发布上来,你可以去http://pecl.php.net/package/APC这里下载源码看看 昨晚看完书上的PHP优化部分,感觉一头雾水 wangbo_wb,哪里有优化PHP的书? 要想知道apc的细节,就必须要先知道什么是OPcode,中间码,解释器的实现,解释器先将php解释文件解释成opcode,然后opcode再转成相应的机器相关的二进制代码,才可以执行。php转成opcode的过程是挺消耗资源的,apc就是为web服务器节省这个解释成opcode的时间和资源 诡异事件,数组问题 为什么里面的javascript没执行呢?貌似没执行CheckPost()判断啊? WAP下载文件问题 這算不算是PHP的bug? LWPHP代码生成器发布了-来拍板砖吧! 简单的sql语句问题。 我是新手,向各位大哥请教一个问题PHP与MYSQL onclick调用php函数问题 关于$_GET["id"] 和 isset($id)的不解!!!!!! 一个关于表单属性的问题? 重新编译了php_memcache.dll 散分 Class 'mysqli' not found的问题
http://www.17dst.com/thread-5061-1-1.html
有兴趣的一起交流!
1. apc是靠自己设定的缓存过期时间,来实现定时更新缓存的!也就是不会检测到数据更新的!
2. apc是存放在内存中,保持一个hash map 数组!也就是键和值对应的关系!通过加载文件的hash码作为键,来获取相应的缓存!
而我设的ttl是7200另外还有个问题,当url的参数改变时,缓存又将做什么?
int apc_module_init(int module_number TSRMLS_DC)
{
/* apc initialization */ apc初始化开始 */
#if APC_MMAP
apc_sma_init(APCG(shm_segments), APCG(shm_size)*1024*1024, APCG(mmap_file_mask));
#else
apc_sma_init(APCG(shm_segments), APCG(shm_size)*1024*1024, NULL);
#endif
apc_cache = apc_cache_create(APCG(num_files_hint), APCG(gc_ttl), APCG(ttl));
apc_user_cache = apc_cache_create(APCG(user_entries_hint), APCG(gc_ttl), APCG(user_ttl)); apc_compiled_filters = apc_regex_compile_array(APCG(filters)); /* override compilation */ 就是这里替换了zend解析引擎 */
old_compile_file = zend_compile_file;
zend_compile_file = my_compile_file;
REGISTER_LONG_CONSTANT("\000apc_magic", (long)&set_compile_hook, CONST_PERSISTENT | CONST_CS); APCG(initialized) = 1; /* apc初始化完成 */
return 0;
}也就是弄明白了my_compile_file也就弄明白了你上面的问题,有事请来不及分析了,就先发上来吧my_compile_file见下面的代码
http://pecl.php.net/package/APC
这里下载源码看看
php转成opcode的过程是挺消耗资源的,apc就是为web服务器节省这个解释成opcode的时间和资源