使用PHP创建多个zip文件

时间:2018-02-25 19:46:39

标签: symfony laravel-5

我在PHP / Laravel中遇到同步创建多个zip文件的问题,我复制了生成的所有命令并挤入Shell,它正常执行,但是当我进入PHP运行时它只生成第一个文件= /.

控制器代码。

foreach ($passwords as $p){
        if($i == 0){
            $command = 'zip -u -j -P '.$p.' '.$dir.'/'.$count.'.zip '.storage_path().'/app/'.$directory.'/'.$file1->getClientOriginalName();
            $commands->push($command);
        }else{
            $command = 'zip --quiet -j -P '.$p.' '.$dir.'/'.$count.'.zip '.storage_path().'/app/'.$directory.'/'.($count+1).'.zip';
            $commands->push($command);
        }
        $count--;
        $i++;
    }
    foreach ($commands as $p){
        echo $p.'<br/>';
    }
    foreach ($commands as $c){
        $process = new Process($c);
        $process->start();
        sleep(10);
        if($process->isTerminated()){
            sleep(1);
        }
        if ($errorOutput = $process->getErrorOutput()) {
            throw new RuntimeException('Process: ' . $errorOutput);
        }
    }

Data $commands

该脚本仅生成文件50.zip。

1 个答案:

答案 0 :(得分:0)

不确定sleep是否会干扰子进程(shell命令)。请尝试:

foreach ($commands as $c){
    $process = new Process($c);
    // Set the timeout instead of sleeping
    $process->setTimeout(10);
    $process->start();

    // Wait for the process to finish
    $process->wait();

    if ($errorOutput = $process->getErrorOutput()) {
        throw new RuntimeException('Process: ' . $errorOutput);
    }
}

wait()来电以更精细的方式使用usleep 可能为此提供帮助。

它是否像这样工作?