0

file_exists 関数で非常に奇妙な状況に遭遇しました。ホスティング会社は、php が PHP モードではなく CGI モードで構成されていると述べました。以下はコードです。コードを含むページをロードするとき、50 秒ほどの間にデータ フォルダー内の test.txt というファイルの存在をオンザフライでチェックします。ファイルが見つかった場合は、「ファイルが存在します」と表示し、while ループを終了します。50 秒以内にファイルが見つからない場合は、「ファイルが存在しません」と表示され、ループが中断され、ページの読み込みが終了します。

奇妙なこと 1: 期待どおりに動作していませんでした。ファイルが存在するときに初めてページをロードしたときにのみファイルを見つけることができます。ページを更新したときに test.txt が削除された後も、「ファイルが存在します」と表示され続けます。test.txt がデータ フォルダーにまったくない場合、フォルダーに test.txt を戻しても「ファイルが存在しません」と表示されます。

奇妙なこと 2: サイズが 170K を超える大きなファイルを配置すると、うまく機能しているように見えますが、特に 40 バイト未満の小さなファイルはそうではありません。絶対パスを含むファイルの存在を確認するためにさまざまな方法を試しましたが、まだ運がありません。

手がかりをありがとう!

ページを読み込んでいます...

$counter= 1;

while ($counter++) {

    sleep(5);

    if (file_exists("data/test.txt")) {
    echo "File exists";
    break;
    }

    if ($counter>10){
    echo "File does not exist";
    break;
    }

}
4

2 に答える 2

2

PHPは結果をキャッシュします。clearstatcache();を使用します。file_exists()を使用する前に。

于 2013-02-21T21:47:02.203 に答える
0

このファイルの存在をループ内で複数回チェックしているため、ここではキャッシュを問題として考慮する必要がある場合があります。

-のドキュメントから取得file_Exists()

注:この関数の結果はキャッシュされます。詳細については、 clearstatcache()を参照してください。

おそらく、スクリプトを次のように変更してみてください-

while ($counter++) {
  sleep(5);
  clearstatcache(); 
  if (file_exists("data/test.txt")) {
    echo "File exists";
    break;
  }
  ...
}
于 2013-02-21T21:52:46.917 に答える