.htaccess
静的な Web サイトでファイルを自動的にバージョン管理するためのキャッシュ無効化のルールと共に、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
されます。
各エラーは次のようになります。
[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 の解釈が異なる場合があり、バージョン管理中にファイルを適切に見つけることができないということです。
何か案は?