APC没用过 一直用eaccelerator 和APC类似有选项设置更新时间 未到更新时间 就是源码有改变仍不生效在不设置更新时间的时候 监控过 每次都会读源码 估计通过获得更改时间来判断或者特征?介绍上说会缓存中间码 也就是说缓存从PHP文件转换到引擎所能执行的编码另外也有函数直接进行编码 能带来更稳定的加速 好像能变相加密 现在还没有人做逆向

解决方案 »

  1.   

    这东西应该是个非常优秀的缓存扩展,比zend等还要强一些,难道真的没人用吗?
      

  2.   

    最近正好研究到apc,我手里有一个ppt,自己做的,如果需要可以到这里下载!
    http://www.17dst.com/thread-5061-1-1.html
    有兴趣的一起交流!
      

  3.   

    其实关于你的问题,
    1. apc是靠自己设定的缓存过期时间,来实现定时更新缓存的!也就是不会检测到数据更新的!
    2. apc是存放在内存中,保持一个hash map 数组!也就是键和值对应的关系!通过加载文件的hash码作为键,来获取相应的缓存!
      

  4.   

    第一个问题,好像不是这样的,我做的一个php页面,当我修改源码是,刷新页面,发现页面已经更新成新的了。
    而我设的ttl是7200另外还有个问题,当url的参数改变时,缓存又将做什么?
      

  5.   

    看了一下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见下面的代码
      

  6.   

    太长了发布上来,你可以去
    http://pecl.php.net/package/APC
    这里下载源码看看
      

  7.   

    昨晚看完书上的PHP优化部分,感觉一头雾水
      

  8.   

    wangbo_wb,哪里有优化PHP的书?
      

  9.   

    要想知道apc的细节,就必须要先知道什么是OPcode,中间码,解释器的实现,解释器先将php解释文件解释成opcode,然后opcode再转成相应的机器相关的二进制代码,才可以执行。
    php转成opcode的过程是挺消耗资源的,apc就是为web服务器节省这个解释成opcode的时间和资源