2013-03-18 3 views
2

정적 웹 사이트에서 파일을 자동으로 버전 관리하기위한 캐시 무효화를 위해 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가 때로는 다르게 해석되고 버전을 지정하는 동안 파일을 제대로 찾지 못한다는 것입니다.

아이디어가 있으십니까?

+0

은 F를 시도 할 수 있습니다처럼 서버의 루트가 아니라 내가 정의하는 것 quickish 수정 같은 사이트

는 상수, 루트에 대한 보인다 ile은 존재하지 않습니다. 존재하지 않는 파일에서 상태 (stat)를 읽을 수 없습니다. – Bart

+0

오, 알았어요. 웹 사이트의 루트 또는 파일 경로를 수동으로 정의하기위한 올바른 구문은 무엇입니까? – questy

+0

다음과 같이 :'$ ver = file_exists ($ versionedFile)? 1 : readVersion();'http://php.net/manual/en/function.file-exists.php – Bart

답변

1

문제는 버전 관리 기능에 상대 URL을 전달하고 디스크에 파일 경로가 필요하며 공유 플랫폼에 있거나 $ _SERVER [ 'DOCUMENT_ROOT']에 대한 것입니다. 그것은이

define('SITE_ROOT', '/home5/username/public_html'); 

다음

function VERSIONING($url){ 
    $path = SITE_ROOT.$url; 
    $ver = '.'.filemtime($path).'.'; 
    echo str_replace('.', $ver, $url); 
}