6

従業員が画像ファイルをコピーするSambaを備えたFreeBSDサーバーがあり、それがWebサーバーにアップロードされます(このようにして、FTPをいじる必要はありません)。ファイルのコピーと同時にアップロードスクリプトが実行されている場合、不完全なファイルをアップロードすることがあります。

これを修正するには、ファイルのリストとファイルサイズを取得し、5秒間待ってから、ファイルサイズを再確認します。サイズが一致する場合は、アップロードするために保存します。一致しない場合は、さらに5秒後に再度チェックします。

これは、ファイルが書き込まれているかどうかを確認するための奇妙な方法のようです。これを行うためのより良い、より簡単な方法はありますか?

4

3 に答える 3

2

ロックされたファイルをチェックするshell_exec()など、smbstatus(1)をお勧めしますsmbstatus -LB

于 2012-05-04T14:09:36.680 に答える
2

flock関数http://php.net/flockを使用します-ファイルを書き込むときに排他ロックを取得し、flock($handle, LOCK_EX)書き込まれた後にロックを解放しますflock($handle, LOCK_UN)

アップロードスクリプトは、排他的書き込みロックも取得しようとする可能性があります。成功した場合は、ファイルを移動しても問題ありません。それ以外の場合は、問題ありません。

編集:申し訳ありませんが、ユーザーがsambaを介してサーバーにファイルをコピーすることを忘れました...flockコピー中に使用するスペースがありません...しかし、アップロードスクリプトはflock($handle, LOCK_EX)、成功したかどうかを確認するために使用できます。

于 2012-05-04T14:18:22.300 に答える
0

ファイルをSambaサーバー上の一時フォルダーにコピーするスクリプトを作成し、完全にコピーしてフラッシュしたら、アップロードフォルダーに移動します(つまり、リンクを解除/リンクし、再度コピーしないでください)。

于 2012-05-04T14:10:07.167 に答える