如何通过 PHP 传送之前 GZip 缓存的 HTML 文件?

Nic*_*dot 5 php gzip

情况

我为我的网站开发了一个缓存,其中我当前检查每个页面请求以查看是否存在该页面的静态缓存版本,然后,如果浏览器支持,我会对该页面进行 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;
Run Code Online (Sandbox Code Playgroud)

期望的改变

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

目的

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

Nic*_*dot 2

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

$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;
Run Code Online (Sandbox Code Playgroud)