정적 웹 사이트에서 파일을 자동으로 버전 관리하기위한 캐시 무효화를 위해 PHP 스크립트와 함께 .htaccess
규칙을 사용하고 있습니다.정적 페이지의 PHP 자동 버전 관리 오류
스크립트의 소스는 여기에 있습니다 : http://www.particletree.com/notebook/automatically-version-your-css-and-javascript-files/
나는 변수와 함수의 이름을 변경,하지만 난 그게 문제라고 생각하지 않습니다. header.php에서
스크립트 :
<?php
function VERSIONING($url){
$path = pathinfo($url);
$ver = '.'.filemtime($_SERVER['DOCUMENT_ROOT'].$url).'.';
echo $path['dirname'].'/'.str_replace('.', $ver, $path['basename']);
}
?>
header.php에 등 스크립트, CSS의 기능을 사용하여 :
<?php VERSIONING('/resources/css/stylesheet.css'); ?>
<?php VERSIONING('/resources/js/script.js'); ?>
<?php VERSIONING('/resources/img/logo.png'); ?>
htaccess로 규칙을 캐시 파열 :
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(js|css|jpe?g|png|gif|ico)$ $1.$3 [L]
</IfModule>
이제 문제가 있습니다. 그것은 잘 작동하지만 매 10-24 시간마다 error_log
파일에 VERSIONING
을 사용하는 각 파일에 대해 오류가 발생합니다.
각 오류는 다음과 같습니다
$ver = '.'.filemtime($_SERVER['DOCUMENT_ROOT'].$url).'.';
나는 문제가 될 수있는 것을 아무 생각이 :
[16-Mar-2013 09:06:24] PHP Warning: filemtime(): stat failed for /usr/local/apache/htdocs/resources/js/script.js in /home5/username/public_html/resources/header.php on line 42
그리고 선 (42)는 다음이 포함되어 있습니다. 내 유일한 추측은 DOCUMENT_ROOT가 때로는 다르게 해석되고 버전을 지정하는 동안 파일을 제대로 찾지 못한다는 것입니다.
아이디어가 있으십니까?
은 F를 시도 할 수 있습니다처럼 서버의 루트가 아니라 내가 정의하는 것 quickish 수정 같은 사이트
는 상수, 루트에 대한 보인다 ile은 존재하지 않습니다. 존재하지 않는 파일에서 상태 (stat)를 읽을 수 없습니다. – Bart
오, 알았어요. 웹 사이트의 루트 또는 파일 경로를 수동으로 정의하기위한 올바른 구문은 무엇입니까? – questy
다음과 같이 :'$ ver = file_exists ($ versionedFile)? 1 : readVersion();'http://php.net/manual/en/function.file-exists.php – Bart