2017-08-14 57 views
0

イメージを圧縮するcronスクリプトがあります。基本的には、フォルダを繰り返し処理し、そのフォルダ内のファイルを圧縮します。私の問題は、一部の画像が途中で処理されていることです。私の理論では、ユーザーがイメージをアップロードしていて、イメージのアップロードが完了する前に、コンプレッサーはファイルを圧縮しようとしています。したがって、アップロードされた画像の半分を圧縮し、画像の半分が表示されます。ファイルがPHPでアップロードを完了したかどうかを確認するには?

  1. ファイルのアップロードが完了したことをPHPで確認する方法はありますか?私はファイルが完全に書かれていることを知ったら、私は圧縮を行うことができますように?
  2. また、ファイルが別のプロセスで使用されているかどうかを確認する方法はありますか?
  3. また、ファイルが「ディスクに書き込まれた」ときにそれを見て、10分が経過するまで処理しないほど信頼できると思いますか?ファイルが完全にアップロードされるまで
+0

ファイルをコピーし、コピーを圧縮します。 –

+0

ファイルを書き込んだ時刻を見ることができ、実際には1分で十分です。 http://php.net/manual/en/function.filemtime.php –

答えて

3

PHPは、あなたのアクションをトリガしませんが、あなたのcronの仕事は、彼らが完全だを保存する前にファイルとの対話を開始することが可能です。

$_FILESから何かを保存する場合は、.という接頭辞が付いたバージョンに保存して、不完全とタグ付けします。 cronジョブがそのようなファイルをスキップしていることを確認してください。

次に、保存操作が完了したら、.のプレフィックスを付けずにファイルの名前を変更し、処理に適格にします。

+0

私は機会がおそらく小さいとは知っていますが、ファイルが "動いていない"場合は同じことが起こる可能性はありますか? – coderama

+0

@ codadaファイルの名前を変更するのは瞬間的な操作です。実行されていないか、完了していません。ファイルをコピーすると時間がかかりますが、その間にディレクトリ一覧には表示されますが、不完全で問題が発生します。 – tadman

1

はシナリオに

国旗

の前にそれを書く/修正ファイルセットのフラグを処理するための2つの方法があります。 私たちのアプリケーションはたくさんのファイルを処理します。フラグを設定した後に処理する前にフラグを設定します。フラグを実行すると、ファイルを処理する最善の方法です。

通常、各ファイルの表に余分な列を追加できます。または現在処理中のすべてのファイルを格納できる配列を持つことができます。

filemtime()

あなたはファイルmtimeは、現在時刻が、その後、あなたがそれらを圧縮10分以上の場合のように確認することができますが、いくつかの他のプロセスがファイルが同じで開か使用している場合、前述のように時間。問題が再び発生します。

だから、フラグと一緒に行く方が良いです。他のプロセスが頻繁にファイルを変更しない場合

1

flockを使用して、ファイルが使用されていないことを確認できます。たとえば、hereを参照してください。または、画像が壊れているか破損しているかどうかを確認するには、hereを参照してください。

関連する問題