我正在使用 PHP 脚本以及一些.htaccess
缓存清除规则,以便在静态网站上自动对文件进行版本控制。
脚本的来源在这里: 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
。
每个错误如下所示:
[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 行包含以下内容:
$ver = '.'.filemtime($_SERVER['DOCUMENT_ROOT'].$url).'.';
我不知道问题可能是什么。我唯一的猜测是 DOCUMENT_ROOT 的解释有时会有所不同,并且在版本控制期间无法正确定位文件。
有任何想法吗?