【问题标题】:PHP Zip Archive sporadically creating multiple filesPHP Zip Archive 偶尔创建多个文件
【发布时间】:2011-01-11 19:49:41
【问题描述】:

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

存档名称.zip

存档名称.zip.a09600

存档名称.zip.b09600

存档名称.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

【问题讨论】:

  • 创建此 ZIP 存档后;该页面使用 javascript 重新加载。该页面检查文件是否已创建(并且存在)以及是否提供下载。似乎正在发生的事情是 ZIP 文件已使用 $zip_archive->close() 成功关闭,但该文件实际上并未结束。因此,当页面重新加载以查找archive-name.zip 时,唯一存在的就是archive-name.zip.a09600;所以它再次下降到代码的 ZIP 创建部分,直到它正确为止。不确定是什么原因导致 ZIP 存档的关闭。

标签: php zip archive


【解决方案1】:

这实际上是一个与会话相关的问题;会话数据在第一次传递时没有被保存,因为调用了代码中更高层的函数,多次调用 session_write_close() (使用 exec() 的已知错误的解决方法)。问题在于在会话重新启动后保存/检索数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多