并发写入zip文件

时间:2016-07-01 07:00:55

标签: php concurrency zip

我在PHP中完成了一个过程。此过程从Internet获取文件并将其放在zip文件中。目标zipfile基于算法,​​有4096个zipfiles。目标zipfile基于已处理网址的哈希值。

我有另一个启动http请求的程序,因此我可以同时运行脚本(大约110个进程)。

我的问题很简单。由于线程是伪随机的,因此很容易有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 procces中将文件添加到zip文件中。

感谢。

1 个答案:

答案 0 :(得分:0)

简答:不! zip算法一次分析和压缩一个流。

这在Windows下很难实现。在Linux中它远非易事!我很想创建一个带有唯一索引的db表,并使用该索引号来确定文件名,或者至少标记正在写入文件的文件。