2016-07-01 119 views
0

我有一個在PHP中完成的過程。這個過程從互聯網上獲得一個文件,並將其放入一個zip文件中。目標zipfile基於算法,​​有4096個zip文件。目標zipfile基於處理的URL的哈希值。並行寫入壓縮文件

我有另一個啓動http請願的程序,所以我可以同時運行腳本(大約110個進程)。

我的問題很簡單。由於線程是僞隨機的,因此easly 2線程可以嘗試在同一時刻將文件添加到同一個zip文件。

可能嗎?如果2進程嘗試同時添加文件,該文件是否會損壞?

鎖定文件或類似的東西將是可能的一種可能的解決方案。 我想使用信號量,但閱讀,PHP信號燈不工作在Windows下。

我看到這個可能的解決方案:

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); } 

}

不管怎麼說,問題是是否允許將文件從2個或多個不同的PHP proccesses在同一時間添加到壓縮文件。

謝謝。

回答

0

簡答:不!壓縮算法一次分析和壓縮一個流。

在Windows下這很困難。在Linux中這遠非易事!我會試圖創建一個具有唯一索引的數據庫表,並使用該索引號來確定文件名,或者至少標記文件正在寫入。

+0

感謝您的評論。我將使用像我發佈的文件鎖定解決方案。 – hamboy75