使用循环将文件添加到php的zip会导致zip文件损坏

使用循环将文件添加到php的zip会导致zip文件损坏,php,zip,Php,Zip,我使用以下php脚本将文件添加到带有php的Zip中 <?php ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// session_start(); $zip = new ZipArchive(); $zip_name = time().".zip"; // Zip na

我使用以下php脚本将文件添加到带有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();

?>

注意:会话包含以分号分隔的文件名

执行上述代码后生成的文件。当我以升华文本打开该文件时已损坏。它显示以下错误

///////////////////zip以升华文本打开///////////////////////////////////
警告:filesize():第21行C:\xampp\htdocs\HMApp1\download.php中的1508220713.zip的stat失败

警告:文件“获取”内容(1508220713.zip):无法打开流:第22行的C:\xampp\htdocs\HMApp1\download.php中没有此类文件或目录


警告:readfile(1508220713.zip):无法打开流:在第23行的C:\xampp\htdocs\HMApp1\download.php中没有这样的文件或目录

假设您的会话包含在同一目录中的文件

$filesinSession = 'gallery/1/t.jpg;gallery/1/t2.jpg;'; // if ending with ;
添加trim
$filesToAdd=explode(“;”,trim($filessession,“;”)

使用
0
代替
1

for ($i = 0; $i <= sizeof($filesToAdd) - 1; $i++) {
别忘了关上

$zip->close();
固定收割台

header('Content-Disposition: attachment; filename="' . $zip_name . '"');
已删除
文件获取内容
您不需要它

清除缓冲区//转义服务器错误

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();
$zip=new ZipArchive();
$zip_name=time()。“.zip”;//邮政编码
$zip->open($zip\u name,ZipArchive::CREATE);
$filessession='gallery/1/t.jpg;画廊/1/t2.jpg ;;
$filesToAdd=explode(“;”,trim($filessession,“;”);
对于($i=0;$i addFile($filesToAdd[$i],basename($filesToAdd[$i]));
}
$zip->close();
$size=filesize($filename);
标题(“内容类型:应用程序/zip”);
标题('Content-Disposition:attachment;filename=“.”.$zip_name.'”);
标题(“内容长度:”.filesize($zip_name));
ob_end_clean();
冲洗();
readfile($zip_名称);
退出();

您有足够的权限创建文件吗?@lvaroTouzón zip文件是在我的脚本所在的同一文件夹中创建的。但是,当我试图读取该zip文件进行下载时,它会抛出以上三个错误。那么,php似乎没有本地化您的.zip文件,@lvaroTouzón那么我该怎么办?您调用了$zip->close()?
$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();