Как использовать etags в файле PHP?
Как вы реализовали etags внутри файла PHP? Что я загружаю на сервер и что вставляю в файл PHP?
2 ответа
Решение
Создайте / отредактируйте ваш файл.htaccess и добавьте следующее:
FileETag MTime Size
Либо поместите следующее в функцию, либо поместите ее в верхнюю часть PHP-файла, над которым вам нужно работать etags:
<?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;
}
?>
Версия, соответствующая 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);