在 php 中创建 zip 和下载在 Mozilla 浏览器中不起作用

Posted

技术标签:

【中文标题】在 php 中创建 zip 和下载在 Mozilla 浏览器中不起作用【英文标题】:Creating zip and download in php not working in Mozilla Browser 【发布时间】:2015-10-14 22:39:07 【问题描述】:

我正在尝试创建一个 zip 文件并使用 ZipArchive 库通过 php 脚本下载它。

$post['files']此变量包含托管在 Amazon S3 上的图像的 URL,因此首先我将它们下载到我的服务器,创建 zip 文件并下载它们。

我当前的代码在 chrome 上运行良好,我也在 Safari 和 Opera 上测试过,它运行良好,但是当我尝试用 Mozilla Firefox 做同样的事情时,它现在可以运行了。

请看一下我的 php 脚本

&lt?php if(isset($_POST['createZip'])) $post = $_POST; $file_folder = "压缩文件"; // 加载文件的文件夹 //下载到我的服务器 foreach($post['files'] as $file) $ch = curl_init($file); $fp = fopen($file_folder.basename($file), 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); if(extension_loaded('zip')) // 检查 ZIP 扩展是否可用 if(isset($post['files']) 和 count($post['files']) > 0) // 检查文件是否被选中 $zip = 新的 ZipArchive(); // 加载 zip 库 $zip_name = "ZipFIle.zip"; // 邮编名称 if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) // 打开 zip 文件以加载文件 $error .= "抱歉,此时 ZIP 创建失败"; $dir = new DirectoryIterator("ZipFIle"); foreach ($dir as $fileinfo) if (!$fileinfo->isDot()) //var_dump($fileinfo->getFilename()); $imgfile = $fileinfo->getFilename(); foreach($post['files'] as $file) if ( basename($file) == $imgfile) //获取文件并将其添加到zip $zip->addFile($file_folder.$imgfile);// 将文件添加到zip中 //foreach($post['files'] as $file) //如果 $zip->close(); 如果(文件存在($zip_name)) //回显 $zip_name ; // push 下载压缩包 header('内容类型:应用程序/zip'); header('Content-Disposition: attachment; filename="'.$zip_name.'"'); 读取文件($zip_name); // 删除临时路径中存在的 zip 文件 取消链接($zip_name); foreach ($dir as $fileInfo) if(!$fileInfo->isDot()) //创建zip后删除所有文件 取消链接($fileInfo->getPathname()); //foreach 删除 elseecho "没有 zip"; 别的 $error .= "请选择要压缩的文件"; 别的 $error .= "你没有 ZIP 扩展名"; ?&gt

当我尝试执行我的代码时收到这些警告

警告:fopen(ZipFIle/) [function.fopen]:无法打开流:是第 9 行 /home/my-server/download.php 中的目录 警告:curl_setopt():提供的参数不是第 10 行 /home/my-server/download.php 中的有效文件句柄资源 警告:fclose():提供的参数不是第 14 行 /home/my-server/download.php 中的有效流资源 警告:无法修改标头信息 - 第 44 行 /home/my-server/download.php 中的标头已由(输出开始于 /home/my-server/download.php:9)发送 警告:无法修改标头信息 - 第 45 行 /home/my-server/download.php 中的标头(输出开始于 /home/my-server/download.php:9)

请指导!

【问题讨论】:

这些消息都是服务器警告。浏览器不相关。实际上,这里只有一个错误,所有其他消息都由此而来。消息很清楚,如果您仍然遇到困难,为什么不解决该问题并返回? @HoboSapiens 谢谢我只是隐藏了错误并且它起作用了。 所以你实际上并没有解决问题,你只是隐藏了它。提醒我不要使用你们的任何软件。 @HoboSapiens 这些只是警告,我必须尽快修复代码。这就是为什么我只是隐藏它们,因为它已经在其他浏览器上工作了;) @HoboSapiens 我已经修复了所有的警告,现在你可以根据需要使用我的软件了 :) 【参考方案1】:

这些消息都是服务器warnings。浏览器不相关。

【讨论】:

以上是关于在 php 中创建 zip 和下载在 Mozilla 浏览器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CakePhp 中创建 Zip 文件并下载?

Spring MVC - 在内存中创建一个ZIP文件,让用户下载

从内存中的 url 下载图像并在内存中创建 zip 存档以发送到浏览器

在 php 中创建和下载 zip 存档

如何使用 php 读取 zip 文件的创建日期

无法在 codeigniter 中创建 zip 文件