我使用以下php脚本将文件添加到Zip中。
<?php
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
session_start();
$zip = new ZipArchive();
$zip_name = time().".zip"; // Zip name
$zip->open($zip_name, ZipArchive::CREATE);
$filesinSession = $_SESSION['files'];
$filesToAdd = explode(';', $filesinSession);
for($i = 1 ; $i <= sizeof($filesToAdd)-1 ; $i++)
{
//echo $filesToAdd[$i]."<br>";
$zip->addFile($filesToAdd[$i]);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
header('Content-type: application/zip');
header('Content-disposition: filename="' . $zip_name . '"');
header("Content-length: " . filesize($zip_name));
$zip_file = file_get_contents($zip_name);
readfile($zip_name);
exit();
?>
注意:session包含以分号分隔的文件名。
由于上述代码执行而生成的文件。当我用崇高文本打开该文件时,它被损坏了。它显示以下错误。
///////////////////拉链以崇高的文字打开/////////////////////// ////////////
警告:filesize():对 C:\ xampp \ htdocs \ HMApp1 \ download.php 中的1508220713.zip的统计信息失败 21 <登记/>
警告:file_get_contents(1508220713.zip):无法打开流: C:\ xampp \ htdocs \ HMApp1 \ download.php 中行中没有此类文件或目录> 22
警告:readfile(1508220713.zip):无法打开流: C:\ xampp \ htdocs \ HMApp1 \ download.php 中行中没有此类文件或目录> 23
答案 0 :(得分:1)
我在你的代码中发现了一些经典错误,这里是
假设您的会话包含相对目录相同的文件
$filesinSession = 'gallery/1/t.jpg;gallery/1/t2.jpg;'; // if ending with ;
添加修剪$filesToAdd = explode(';', trim($filesinSession, ';'));
使用0
代替1
for ($i = 0; $i <= sizeof($filesToAdd) - 1; $i++) {
在添加//最佳实践
期间添加本地文件名$zip->addFile($filesToAdd[$i], basename($filesToAdd[$i]));
别忘了关闭
$zip->close();
固定标题
header('Content-Disposition: attachment; filename="' . $zip_name . '"');
已移除 file_get_contents
您不需要
清理缓冲区//转义服务器错误
ob_end_clean();
flush();
完整来源
$zip = new ZipArchive();
$zip_name = time() . ".zip"; // Zip name
$zip->open($zip_name, ZipArchive::CREATE);
$filesinSession = 'gallery/1/t.jpg;gallery/1/t2.jpg;';
$filesToAdd = explode(';', trim($filesinSession, ';'));
for ($i = 0; $i <= sizeof($filesToAdd) - 1; $i++) {
$zip->addFile($filesToAdd[$i], basename($filesToAdd[$i]));
}
$zip->close();
$size = filesize($filename);
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . $zip_name . '"');
header("Content-length: " . filesize($zip_name));
ob_end_clean();
flush();
readfile($zip_name);
exit();