我在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文件中。
感谢。
答案 0 :(得分:0)
简答:不! zip算法一次分析和压缩一个流。
这在Windows下很难实现。在Linux中它远非易事!我很想创建一个带有唯一索引的db表,并使用该索引号来确定文件名,或者至少标记正在写入文件的文件。