ZipArchive创建文件,但ZipArchive :: close()无法重命名

时间:2017-08-02 14:03:26

标签: php laravel-5.3 ziparchive

我环顾四周,虽然我收到的错误消息显示出来,但这个特殊问题似乎很新颖。我有一个使用ZipArchive库构建zip文件的PHP脚本。该文件实际上是成功创建的,但是当我调用close()时,我得到了常见的ErrorException:

ZipArchive::close(): Renaming temporary file failed: No such file or directory

zip文件已成功创建,但是当我在抛出异常后查找它时,它的扩展名为.zip.a04896。如果我砍掉.a04896,那么我可以毫无问题地打开文件,它包含预期的内容;我认为这是某种指示,该文件仍在建设中。由于我没有专门通过文件名访问zip存档,我认为这不会干扰重命名尝试。

我正在运行Windows 10,代码是Laravel 5.3应用程序的一部分。以下是有问题的代码:

            $zip = new \ZipArchive();
            $zipFile = config( 'app.upload_root' ).'\\downloads\\Interventions_'.$fileTime.".zip";
            if ($zip->open($zipFile, \ZipArchive::CREATE)!==TRUE) {
                throw new \Exception("cannot open <$zipFile>\n");
            }
            foreach ($interventions as $row) {      
                $pdf_name = config( 'app.upload_root' ).'\\uploads\\'.$row->UIC.'_'.sprintf("%010d",$row->id).'.pdf';
                if( file_exists($pdf_name) ){                   
                    $result = $zip->addFile( $pdf_name, $row->UIC.'_'.sprintf("%010d",$row->id).'.pdf' );
                    if ($result == FALSE ){
                        throw new \Exception( $pdf_name.' did not add to ZIP succesfully');
                    }
                }
                else{
                    throw new \Exception( $pdf_name.' does not exist' );
                }
            }
            file_put_contents ( $textFile, $output );
            $result = $zip->addFile($textFile, $textFileName);
            if ($result == FALSE ){
                throw new \Exception( $testFileName.' did not add to ZIP succesfully');
            }
            sleep(1);
            $zip->close();              

关于这里出了什么问题的任何建议?是否有可能在Windows 10下我需要不同的权限来重命名文件而不是创建它?或者.zip问题之后是那种奇怪的扩展吗?

1 个答案:

答案 0 :(得分:0)

好的,这很烦人:问题随后消失了,zip档案正在顺利关闭。自从我的原始发布以来,我的开发机器已经重新启动,所以我的假设是&gt;某事&lt;正如Álvaro所暗示的那样持续锁定。