또 다른 방법은 모든 것을 PHP 스크립트로 전달하는 것입니다. PHP 스크립트는 모든 것을 gzip하고 캐시합니다. 모든 요청에 대해 캐시 된 버전과 타임 스탬프를 비교하여 소스 파일보다 최신 버전 인 경우이를 반환합니다. PHP를 사용하면 HTTP 헤더를 덮어 쓸 수 있으므로 Apache 자체에서 GZIP 처리 된 것처럼 제대로 처리됩니다. 당신을 위해 일을 할 수있는이 같은
뭔가 :
htaccess로
RewriteEngine On
RewriteRule ^(css/styles.css)$ cache.php?file=$1 [L]
cache.php : 아파치 캐시 된 버전을 생성하기 위해 당신은 쓰기 권한이 필요합니다
<?php
// Convert path to a local file path (may need to be tweaked)
cache($_GET['file']);
// Return cached or raw file (autodetect)
function cache($file)
{
// Regenerate cache if the source file is newer
if (!is_file($file.'.gz') or filemtime($file.'.gz') < filemtime($file)) {
write_cache($file);
}
// If the client supports GZIP, send compressed data
if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) and strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
header('Content-Encoding: gzip');
readfile($file.'.gz');
} else { // Fallback to static file
readfile($file);
}
exit;
}
// Saved GZIPed version of the file
function write_cache($file)
{
copy($file, 'compress.zlib://'.$file.'.gz');
}
. 스크립트를 약간 수정하여 캐시 된 파일을 다른 위치에 저장할 수 있습니다.
이것은 광범위하게 테스트되지 않았으므로 필요에 따라 약간 수정해야하지만 아이디어는 모두 있어야하며 시작할 수 있도록 충분해야합니다.
파일을 변경할 때마다 gzipped 버전을 생성해야하거나 (1) gzipped 사용자에게 파일의 이전 버전이 제공되도록하거나 (2) 임의로 gzipped 버전이 아직 작성되지 않은 경우 404ing. 단지 실수 하나, 갑자기 Heisenbug를 추적하는 것이 매우 어렵습니다. –
예 - 특정 유스 케이스는 매우 적은 수의 파일을 변경하기위한 것일 뿐이므로이 방법으로는 여전히 단점이 있지만 분명히 막연한 것은 아닙니다. 나는 "RewriteCond % {REQUEST_FILENAME} -f"를 체인에 추가하는 것을 고려해 봤지만, 상수 파일 통계의 비효율에 대한 우려가있다. (나는 아파치 캐시가 어떻게 정보를 캐쉬하는지 모르겠다.) –