我正在使用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