PHP 关闭 zipArchive 打印垃圾文本(数据转储)
PHP Closing zipArchive prints junk text (data dump)
我一直在尝试学习如何正确使用 php 中的 zipArchive 函数来创建和下载包含所选文件的 zip 文件夹。
它成功地创建了 zip 文件并将其存储在服务器上,但我无法让下载在 $zip->close(); 之后自动开始;命令它打印页面和垃圾字符页面,就好像它正在打印 zip 文件一样。这是其中的一部分:http://www.abpdigital.com/uploads/Junk%20Text.png
我从这里得到我的基本代码:http://roshanbh.com.np/2008/09/force-download-mutiple-files-zip-archive-php.html
这是它在我的代码中的样子:
function zipFilesAndDownload($file_names,$archive_file_name,$file_path)
{
//create the object
$zip = new ZipArchive();
//create the file and throw the error if unsuccessful
if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE)
{
exit("cannot open <$archive_file_name>\n");
}
//add each files of $file_name array to archive
foreach($file_names as $files)
{
$zip->addFile($file_path.$files,$files);
}
$zip->close();
//THIS IS WHEN THE JUNK TEXT STARTS
//then send the headers to force download the zip file
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$archive_file_name);
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
readfile($archive_file_name);
exit;
}
有没有人知道可能导致垃圾文本的原因?我是否错误地使用了 headers?如有必要,我可以提供更多代码,但我相当确定变量传递是可靠的。我一直在 Chrome 中进行测试,但我已经证实这种行为在 IE 和 Firefox 中仍然存在。
[更新] 我发现如果我在当前目录的子文件夹中创建 zip 文件(而不是直接在当前目录中),它不会在页面上输出所有垃圾文本。
现在我的问题更多的是,我希望从 headers 获得的 auto-download 功能没有而且从未起作用。就错误或事件而言,我应该寻找什么可以揭示问题所在?
好像是headers出了问题。显示的有线垃圾只是 zip-file 中的 raw-data。请检查 $archive_file_name 是否正确。尝试按以下方式更改 headers:
// It should contain only the filename not the complete path
header("Content-Disposition: attachment; filename=".basename($archive_file_name));
// Adding file-size to header
header("Content-Length: " . filesize($archive_file_name));
// Check that is path to zip with filename
readfile($archive_file_name);
我一直在尝试学习如何正确使用 php 中的 zipArchive 函数来创建和下载包含所选文件的 zip 文件夹。
它成功地创建了 zip 文件并将其存储在服务器上,但我无法让下载在 $zip->close(); 之后自动开始;命令它打印页面和垃圾字符页面,就好像它正在打印 zip 文件一样。这是其中的一部分:http://www.abpdigital.com/uploads/Junk%20Text.png
我从这里得到我的基本代码:http://roshanbh.com.np/2008/09/force-download-mutiple-files-zip-archive-php.html
这是它在我的代码中的样子:
function zipFilesAndDownload($file_names,$archive_file_name,$file_path)
{
//create the object
$zip = new ZipArchive();
//create the file and throw the error if unsuccessful
if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE)
{
exit("cannot open <$archive_file_name>\n");
}
//add each files of $file_name array to archive
foreach($file_names as $files)
{
$zip->addFile($file_path.$files,$files);
}
$zip->close();
//THIS IS WHEN THE JUNK TEXT STARTS
//then send the headers to force download the zip file
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$archive_file_name);
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
readfile($archive_file_name);
exit;
}
有没有人知道可能导致垃圾文本的原因?我是否错误地使用了 headers?如有必要,我可以提供更多代码,但我相当确定变量传递是可靠的。我一直在 Chrome 中进行测试,但我已经证实这种行为在 IE 和 Firefox 中仍然存在。
[更新] 我发现如果我在当前目录的子文件夹中创建 zip 文件(而不是直接在当前目录中),它不会在页面上输出所有垃圾文本。
现在我的问题更多的是,我希望从 headers 获得的 auto-download 功能没有而且从未起作用。就错误或事件而言,我应该寻找什么可以揭示问题所在?
好像是headers出了问题。显示的有线垃圾只是 zip-file 中的 raw-data。请检查 $archive_file_name 是否正确。尝试按以下方式更改 headers:
// It should contain only the filename not the complete path
header("Content-Disposition: attachment; filename=".basename($archive_file_name));
// Adding file-size to header
header("Content-Length: " . filesize($archive_file_name));
// Check that is path to zip with filename
readfile($archive_file_name);