2016-07-01 15 views
0

私はPHPで処理を行っています。このプロセスは、インターネットからファイルを取得し、zipファイルの中に入れます。ターゲットzipファイルはアルゴリズムに基づいており、4096個のzipファイルがあります。ターゲットのzipファイルは、処理されたURLのハッシュに基づいています。zipファイルへの同時書き込み

私は、スクリプトを同時に実行することができるように、http申請を開始する別のプログラムを用意しています(約110プロセス)。

私の質問は簡単です。スレッドは疑似ランダムなので、2つのスレッドは同じ瞬間に同じzipファイルにファイルを追加しようとすることがあります。

可能ですか? 2つのプロセスが同時にファイルを追加しようとすると、ファイルが破損しますか?

ファイルをロックするなどの可能性があります。 私はセマフォを使用することを考えていましたが、読み込み、phpセマフォはウィンドウの下では動作しません。

私はこの可能な解決策を見てきました。同時に2つ以上の異なるPHPのproccessesからzipファイルにファイルを追加することが許可されている場合

if (!function_exists('sem_get')) { 
function sem_get($key) { return fopen(__FILE__.'.sem.'.$key, 'w+'); } 
function sem_acquire($sem_id) { return flock($sem_id, LOCK_EX); } 
function sem_release($sem_id) { return flock($sem_id, LOCK_UN); } 

}

とにかく質問です。

ありがとうございました。

答えて

0

短い回答:いいえ!ジップアルゴリズムは、一度に1つのストリームを分析して圧縮します。

これはWindowsでは厳しいです。 Linuxでは簡単ではありません!一意のインデックスを持つdbテーブルを作成し、そのインデックス番号を使用してファイル名を決定したり、少なくともファイルが書き込まれていることを示すフラグを付けたりすることができます。

+0

コメントありがとうございます。私は投稿したようなファイルロックソリューションを使用します。 – hamboy75

関連する問題