2012-09-21 55 views
4

形势如何通过PHP提供以前的GZipped缓存HTML文件?

我有一个缓存为我的网站开发,其中我现在检查每个页面请求,看看是否有是页面的静态,缓存的版本,然后,如果浏览器的支持,我gzip压缩的页面和手它回到浏览器。

目前代码

$hash = md5('http://mydomain.com'.$url); 
$fl = substr($url, 1, 1); 
if(file_exists('/home/myaccount/public_html/cache/'.$fl.'/'.$hash.'.html') && $_GET['cache'] != 'off' && $fl!=''): 
    ob_start("ob_gzhandler"); 
    header('Content-type: text/html; charset=utf-8'); 
    include 'cache/'.$fl.'/'.$hash.'.html'; 
elseif(file_exists('/home/myaccount/public_html/cache/'.$hash.'.html') && $_GET['cache'] != 'off'): 
    ob_start("ob_gzhandler"); 
    header('Content-type: text/html; charset=utf-8'); 
    include 'cache/'.$hash.'.html'; 
else: 
    $_SERVER['REQUEST_URI'] = str_replace('?cache=off','',$_SERVER['REQUEST_URI']); 
    include 'interface/index.php'; 
endif; 

预期变化

我想改变它,这样在服务器上的文件已经gzip压缩。我已经知道如何gzip文件并将它们设置在服务器上。但是,我想知道如何修改脚本的这部分内容,以便检查浏览器是否支持gzip,然后简单地将它们交给gzip版本的文件。如果不支持,它将解压缩并将其交回服务器。

目的

这将完成几件事情。首先,它将使用更少的服务器空间来存储文件。其次,由于大多数浏览器都会接受gzip格式,因此无需在每个页面请求上对它们进行gzip处理,从而缩短了几毫秒的时间。相反,它只需要为非常少的不受支持的浏览器解压文件。第三,这是一个了解更多关于php如何处理gzip文件的机会。

回答

1

我能够找出答案。这里是任何有兴趣的人:

$hash = md5('http://mydomain.com'.$url); 
$fl = substr($url, 1, 1); 
if(file_exists('/home/myaccount/public_html/cache/'.$fl.'/'.$hash.'.html.gz') && $_GET['cache'] != 'off' && $fl!=''): 
    if (strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], "gzip")): 
     header("X-Compression: gzip"); 
     header("Content-Encoding: gzip"); 
     readfile('cache/'.$fl.'/'.$hash.'.html.gz'); 
    else: 
     $gz = gzopen ('cache/'.$fl.'/'.$hash.'.html.gz', "r"); 
     $contents = gzread ($gz, 1000000); 
     echo $contents; 
    endif; 
elseif(file_exists('/home/myaccount/public_html/cache/'.$hash.'.html.gz') && $_GET['cache'] != 'off'): 
    if (strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], "gzip")): 
     header("X-Compression: gzip"); 
     header("Content-Encoding: gzip"); 
     readfile('cache/'.$hash.'.html.gz'); 
    else: 
     $gz = gzopen ('cache/'.$hash.'.html.gz', "r"); 
     $contents = gzread ($gz, 1000000); 
     echo $contents; 
    endif; 
else: 
    $_SERVER['REQUEST_URI'] = str_replace('?cache=off','',$_SERVER['REQUEST_URI']); 
    include 'interface/index.php'; 
endif; 
0

我只看到第三个原因足以在php中实现这个东西,但是你应该自己发现解决方案。

至于前两个原因,阿帕奇有两种选择:

  • mod_negotiation可用于发送,gzip压缩前的文件,而不是 其未压缩版本的支持客户端
  • mod_deflate可能用于对不支持压缩传输编码的客户端输出 流进行解压缩(充气)
相关问题