场合
我为我的网站开发了一个缓存,其中我当前检查每个页面请求以查看是否存在页面的静态缓存版本,然后,如果浏览器支持,我将页面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压缩文件的机会。
答案 0 :(得分: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;
答案 1 :(得分:0)
我只看到第三个原因足以在php中实现这个功能,但是你应该自己发现这个解决方案。
至于前两个原因,Apache有两个选择: