3

私は次のように呼んでいます:

while ( (!file_exists('./download/ah141090676723_100.jpg')) || (filesize('./download/ah141090676723_100.jpg') == '1359') ) { code that retrieves a remote file and writes it to '/ah141090676723_100.jpg'  }

...そして、「filesize(): stat failed for ./download/ah141090676723_100.jpg」エラーが発生します。

私が解決しようとしている問題は、リモート サーバーが不安定で、ガベージ応答 (常に 1359 バイトの長さ) を返すことがあることです。したがって、A) ファイルが存在しない (最初の実行)、または B) ファイルがガベージ (1359) に等しいかどうかを確認したいと思います。いずれかが true の場合、ファイルの取得と書き込みを試みます。ゴミではないものが得られるまで、すすいで繰り返します。

コードは実際に機能しているように見えます -- ファイルが取得されて書き込まれ、このループを通過するガベージ応答はありませんでした -- しかし、エラーは私を混乱させます。最初の実行時にファイルが存在しないため、ファイルサイズがこのエラーをスローしている可能性があると思いました。しかし、「||」オペレーターは、最初のランスルーでの2回目の評価を防止する必要があります...そうですか?

「clearstatcache();」を呼び出していることに言及する必要があります。取得/書き込みの後、ループ内。

どんな助けでも大歓迎です!

スコット

4

1 に答える 1

1

への変更

while ( file_exists('./download/ah141090676723_100.jpg') && filesize('./download/ah141090676723_100.jpg') == 1359) 

file_existsいつものように。filesize()ファイルが存在しないか、読み取れない場合は、「stat failed」を返します。

于 2016-01-12T20:47:45.923 に答える