2011-01-11 37 views
0

我有一个PHP脚本(在Apache 2.2上运行PHP 5.2),它创建一个用户下载文件的zip存档。一切似乎都很好,我唯一的问题是,在ZIP归档成功完成之前会定期创建多个文件。例如:PHP Zip档案零星地创建多个文件

archive-name.zip

归档name.zip.a09600

归档name.zip.b09600

归档name.zip.c09600

这确实不是每一次都发生;只是周期性地 - 文件仍然被创建,但有时候这些额外的'文件'在完成后留在服务器上。创建ZIP存档的代码如下:

 $zip_archive = new ZipArchive(); 
     $zip_archive->open($archiveFullName,ZIPARCHIVE::CREATE); 

     if(!file_exists($archiveFullName)) { 
      foreach ($completed_file_arr as $zip_file) { 
       $isFiller = substr($zip_file,-8) == "_err.txt"; 
       if(!$isFiller) { 
        $zip_archive->addFile($zip_file,$localname); 
       } else $zip_archive->addFromString ($zip_file, "The requested source file could not be found."); 
      } 
     } 

     while(!$zip_archive->close()) sleep(1); //ensure that the ZIP file finishes closing 
+0

创建此ZIP存档后;该页面使用JavaScript重新加载。该页面检查文件是否已创建(并存在),以及是否提供下载。似乎正在发生的事情是,使用$ zip_archive-> close()成功关闭ZIP文件,但该文件实际上并未完成。所以当页面重新加载寻找archive-name.zip时,唯一存在的就是archive-name.zip.a09600;所以它会再次下载到代码的ZIP创建段中,直到它正确。不知道是什么原因可能导致ZIP归档结束。 – Dogoferis 2011-01-12 21:22:10

回答

0

事实证明,这实际上是一个与会话相关的问题;会话数据不会在第一次传递时保存,因为会调用多次调用session_write_close()的代码中的更高版本的函数(解决exec()的已知错误)。之后会话开始备份后,问题在于保存/检索数据。