2012-03-19 7 views
2

5分ごとに更新されるファイルが私のサーバーにあります。ファイルはftp経由でアップロードされ、アップロードが完了すると更新されます。 私はこのファイルのデータを取得するためにPHPスクリプトを使用しています。スクリプトがこのファイルを読み込むたびに、完全で有効な(同時にアップロードされていない)ことを確認したいと思います。ファイルが完全で、他のアプリケーションでPHPで使用されていないことを確認する方法

次のコードは安全で、このチェックに適していますか?

if ((($handle = fopen('/var/import/data.csv', 'r')) !== FALSE) && (filesize('/var/import/data.csv')>10)) { 

....do stuff.... 

} 
+3

最初にロックするのはどうですか:http://php.net/manual/en/function.flock.php? –

答えて

0

私は2つのステージ

  1. (新しいファイルなど)をアップロード
  2. 名前変更(以前のバージョンを上書きする)

大規模なこのとしてFTPアップロードを処理したいですは、スクリプトが不完全なファイルを見る機会を減らします。

また、ファイルの変更時刻(mtime)を確認して、30秒より古い場合にのみファイルにアクセスしてください。この時間をアップロード時間よりも長くするようにしてください。

+0

この関数は 'filemtime'であり、キャッシュされているので、ファイルの最後に変更された日付を特定するたびに' clearstatcache'を呼び出す必要があります。 – Timur

1

ファイルの更新中にロックファイルを作成し、更新が完了したらロックファイルを削除する必要があります。あなたがそれを読むことができるかどうかを知るために、上記のロックファイルをチェックしてください。