如何在PHP文件中使用etag?

问题描述 投票:0回答:2

如何在 PHP 文件中实现 etag?我要上传什么到服务器以及将什么插入到我的 PHP 文件中?

php caching header etag
2个回答
44
投票

创建/编辑您的 .htaccess 文件并添加以下内容:

FileETag MTime Size

将以下内容放在函数中,或者将其放在需要 etag 处理的 PHP 文件的顶部:

<?php 
    $file = 'myfile.php';
    $last_modified_time = filemtime($file); 
    $etag = md5_file($file); 

    header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); 
    header("Etag: $etag"); 

    if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time || 
            trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag)
    { 
        header("HTTP/1.1 304 Not Modified"); 
        exit; 
    } 
?>

4
投票

对应的版本https://datatracker.ietf.org/doc/html/rfc7232#section-2.3(必须引用etag值):

<?php
$file = __DIR__ . '/myfile.js';
$etag = '"' . filemtime($file) . '"';

// Use it if the file is changed more often than one time per second:
// $etag = '"' . md5_file($file) . '"';

header('Etag: ' . $etag);

$ifNoneMatch = array_map('trim', explode(',', trim($_SERVER['HTTP_IF_NONE_MATCH'])));
if (in_array($etag, $ifNoneMatch, true) || count($ifNoneMatch) == 1 && in_array('*', $ifNoneMatch, true)) {
    header('HTTP/1.1 304 Not Modified');
    exit;
}

print file_get_contents($file);
© www.soinside.com 2019 - 2024. All rights reserved.