我正在使用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']);
}
?>
使用上的脚本,CSS等功能中的header.php:
<?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的解释会有所不同,并且在版本控制期间无法正确定位文件。
任何想法?
在F ile不存在。没有状态(stat)可以从不存在的文件中读取。 – Bart 2013-03-18 20:50:13
哦,我明白了。手动定义网站根目录或文件路径的正确语法是什么? – questy 2013-03-18 20:52:23
类似于:'$ ver = file_exists($ versionedFile)? 1:readVersion();'http://php.net/manual/en/function.file-exists.php – Bart 2013-03-18 20:59:46