情况可以理解为,有一个已经做好的php网站,类似cms性质的,没用任何框架和mvc模式,用的是php代码和html代码混合编写的,里面还有很多数据库读取命令。
现在我接手这个网站,想要提高网站的速度,彻底重新网站太麻烦了,我想用简单的方法实现缓存。我现在的想法是,在每个需要用缓存的php页面开头,调用一个缓存开启函数,这个函数判断当前页面的url,然后md5后去缓存文件夹判断是否存在这个文件,如果存在的话,就读取这个文件,把内容输出给浏览器,用exit结束这个php文件,
如果不存在,就用file_get_contents函数,把当前页面的url(包括参数)传给这个函数,读取完毕以后,写入到文件urlmd5后的文件中。因为网站的信数据更新的很快,大概每天几百,我就怕没有缓存的时候访问页面,相当于向服务器发出两次请求(用户直接访问一次,file_get_contents算是第二次),效率是不是比较低,有没有更好的办法,我原来也想过用输入输出流,没成功,最好能直接获取页面输出的内容,写入到缓存文件中,节省一步file_get_contents的性能消耗。谢谢大家了

解决方案 »

  1.   

    还是用专门的缓存模块吧,如果是Linux的话。
      

  2.   

    使用php缓存把缓存写成php文件。这样可以使用内存缓存了
      

  3.   

    写个统一的数据接口函数 memcahe处理
      

  4.   

    哦 我只是想做成在硬盘里面的缓存。服务器上有memcahe,但我不打算在这地方用,因为全部页面会非常多,光数据库就4g多,而且缓存的性能不用太高,硬盘缓存足够了。
      

  5.   

    还是这个建议较好。
    已发布的数据改动量不大的话,我觉得memcache 最好了。
      

  6.   

    不要直接用file_get_contents和file_put_contents读写文件
    写文件前要加锁,读的时候也要(否则读取的是空的)function read_lock_file($fpath){
    $fp = fopen($fpath,'rb');
    if ($fp){

    if (flock($fp,LOCK_SH)){
    $rev='';
    while ( $buf = fread($fp,1024) ){
    $rev.=$buf;
    }

    }else{
    return false;
    }
    fclose($fp);
    return $rev;
    }else{
    return '';
    }
    }
    function write_lock_file($fpath,$content){
    $fp = fopen($fpath,'w+');
    if ($fp){
    $rs = true;
    if ( flock($fp,LOCK_EX,$rs) ){
    fwrite($fp,$content);
    }else{
    return false;
    }
    fclose($fp);
    return true;
    }else{
    return false;
    }
    }
      

  7.   


    我是获取文件内容的时候用file_get_contents这个函数,因为php文件还有参数,要根据参数去数据库取东西,用fopen获取不到这些内容吧,所以只能用file_get_contents后面带上页面的完整域名和路径参数什么的,来实现获取内容,我也就是在这一步感觉效率比较低
      

  8.   

    ====================================
    你还要用HTTP去读取缓存?不是又加重服务器的负担了吗?
      

  9.   


    对啊 我就是不想用file_get_contents再去读取一遍这个页面.但想不到更好的办法获取这个文件的内容了. 所以才请教大家的
      

  10.   


    恩 是的,我只是在判断没有缓存的时候用file_get_contents读取页面,有缓存的情况直接读取缓存了.如果没有更好更方便的方案,我也只有先用这个了.
      

  11.   

    如果是自己的服务器就用apache/nginx的缓存
      

  12.   

    用ob_start ob end 不用file_get_contents