質問
小さなスクリプトがあり、管理フッターからスクリプトバージョンを検出したい。管理者footer.phpにこのコードを配置しました。
<?php
define('VERSION', '1.0');
$fp = fopen("http://v.domain.com/version.txt", "r");
while ($line = fgets($fp)) {
$line;
if (VERSION != $line) {
?>
<div id="upgrade">
<a href="http://domain.com/download/" target="_blank">Download a new version [<?php echo $line; ?>]</a>
</div>
<?php
}
}
?>
version.txtには 1.0.1
のみが含まれ、バージョンを比較するために正常に機能しています。
ここでの問題は、クライアントサイトが遅くなることです。この問題を修正する方法
解決
遅い理由は、PHPコードを実行しているサーバーがHTTPでv.domain.comにアクセスし、version.txtのコピーをダウンロードする必要があるためです。これが起こっている間、PHPはそこに座って待っています。
フッターにあるにもかかわらずページ全体が遅くなるのはなぜですか? Apacheは、ブラウザに出力する前にPHPページの出力を少しキャッシュします。また、出力バッファをフラッシュしても、ブラウザがフラッシュする場合があり、それを制御することはできません。
PHPベースのツールをリリースし、フッターに自動バージョンチェックを追加したいようですね。
もしそうなら、あなたがそれをやっている方法でそれを行うことでいくつかの問題があります:
-
ページが読み込まれるたびにバージョンを確認する必要はありません。確認した最後の日付をどこかに保存し、___日後に再度確認します。 (うまくいけば、すでにこれを行っており、簡単にするために例から省略しています)
-
このようなファイルを別のサーバーから読み取ることは悪い考えです。現在発生しているように、v.domain.comがビジーになると速度が低下する可能性があります。ダウンした場合、タイムアウトを待機しているため、PHPにはさらに時間がかかります。
これを行うより良い方法は、Javascriptを使用することです。ページがロードされると、AJAXを使用するjavascript関数が作成されます。 Javascriptに慣れていない場合、学習曲線が少しあるかもしれませんが、これはあなたの状況に対処する理想的な方法です。
他のヒント
ファイルが単なるバージョン番号である場合、次のことをお勧めします。
$version = file_get_contents('http://wwww.example.com');
if (VERSION != trim($version)) {
}