从HTML表单阵列压缩和下载文件

时间:2014-03-29 19:06:30

标签: php html http-headers ziparchive

我正在尝试创建一个在线系统,我将文件(各种图片)放在服务器上的文件夹中并将其压缩到一个文件夹然后下载。

到目前为止,看看stackoverflow,我已经提出了这个问题,当我使用链接的HTML进行测试时,下载的zip文件是一个带有zip扩展名的文本文件(即user-date.zip)容纳一些错误:

<head>
<title>File Zipper</title>
</head>

<br />
<b>Warning</b>:  filesize(): stat failed for Files/adsfa-20140329.zip in <b>D:\xampp\htdocs\filezipper\ZipScript2.php</b> on line <b>33</b><br />
<br />
<b>Warning</b>:  readfile(Files/adsfa-20140329.zip): failed to open stream: No such file or directory in <b>D:\xampp\htdocs\filezipper\ZipScript2.php</b> on line <b>35</b><br />

这是我的ZipScript2.php代码:

<head>
<title>File Zipper</title>
</head>

<?php
$filelist = $_POST['filestozip'];
$username = $_POST['user'];
$today = date("Ymd");
$packagename = $username.'-'.$today.'.zip';
$package = new ZipArchive;

$package->open($packagename, ZipArchive::CREATE);

foreach ($filelist as $file) {
  $package->addFile('/Files/'.$file.'/pics', 'Files/pics'); 
}
$package->close();

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="'.basename('Files/'.$packagename).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Transfer-Encoding: binary");
    header('Pragma: public');
    header("Content-Length: ".filesize('Files/'.$packagename));
} else {
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="'.basename('Files/'.$packagename).'"');
    header("Content-Transfer-Encoding: binary");
    header('Expires: 0');
    header('Pragma: no-cache');
    header("Content-Length: ".filesize('Files/'.$packagename));
}
readfile('Files/'.packagename);
?>

在我的htdocs文件夹中(我使用Dreamweaver来创建它)我将我的php文件单独放在我的“Files”目录中,该目录将图片放在各自的子目录中。注意:子目录是根据我的HTML表单传递的名称命名的,它们匹配(我已经通过插入各种echo命令进行检查来测试)。

我不确定是否会导致这种情况发生 - 您是否可以对这种情况有所了解?希望有一个修复? :)

1 个答案:

答案 0 :(得分:0)

你必须修复两个错误:

  • 第21,26,29和35行:在“文件”之前加上斜杠,就像使用$ package-&gt; addFile()语句一样。

  • 在打开“&lt;?php”标记之前删除所有HTML代码。 HTTP标头将被发送,但如果在发送到浏览器之前有HTML,则无法使用。开放的php标签应该是你脚本的第一行。

另请参阅:Creating and Downloading a file using PHP

此致

-Gorka