2

.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 の解釈が異なる場合があり、バージョン管理中にファイルを適切に見つけることができないということです。

何か案は?

4

1 に答える 1

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);
}
于 2013-04-13T13:47:27.190 に答える