我正在尝试创建一个在线系统,我将文件(各种图片)放在服务器上的文件夹中并将其压缩到一个文件夹然后下载。
到目前为止,看看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命令进行检查来测试)。
我不确定是否会导致这种情况发生 - 您是否可以对这种情况有所了解?希望有一个修复? :)
答案 0 :(得分:0)
你必须修复两个错误:
第21,26,29和35行:在“文件”之前加上斜杠,就像使用$ package-&gt; addFile()语句一样。
在打开“&lt;?php”标记之前删除所有HTML代码。 HTTP标头将被发送,但如果在发送到浏览器之前有HTML,则无法使用。开放的php标签应该是你脚本的第一行。
另请参阅:Creating and Downloading a file using PHP
此致
-Gorka