我是PHP新手,正在尝试创建ZIP函数,该函数通过ajax调用并下载到用户。 我对zip的反应很好,但是流式传输给我一个错误 ../test.zip的filesize():stat失败,并且读取文件无法打开流,php页面上没有此类文件或目录。 这是下面的代码-我已经很难熬了,似乎找不到适合我情况的答案
<?php
require("../../common.php");
ini_set('display_startup_errors',1);
ini_set('display_errors',1);
error_reporting(-1);
$thisdir = " ";
$zip = new ZipArchive();
$filename = "../test.zip";
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$zip->addFromString('insert.pdf' . time(), "#1 This is a test string added as testfilephp.txt.\n");;
$zip->addFile($filename . "../../../folder/pdf_folder/");
echo "numfiles: " . $zip->numFiles . "\n";
echo "status:" . $zip->status . "\n";
echo $filename;
//$size = filesize($zip->filename);
$zip->close();
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$filename");
header("Content-length: " . filesize($filename));
header("Pragma: no-cache");
header("Expires: 0");
readfile("$filename");
?>
感谢您的帮助或指导
******编辑 这是代码错误
警告:filesize(): / var / --- / ---- / --- / ---- /中的../test.zip的统计信息失败 21
行上的control / ajax / zipAJAX.php
警告:readfile(../ test.zip):无法打开流: / var / --- / ---- / --- /-中没有这样的文件或目录--- / control / ajax / zipAJAX.php 在第 24
答案 0 :(得分:0)
您不能使用addFile方法将文件夹的内容添加到zip文件中。您必须循环目录(http://php.net/dir),并使用addFile方法将每个文件添加到zip中。
在将任何数据发送回用户之前,您可以检查zip文件是否存在。
$zip->close();
if(file_exists($file)) {
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$filename");
header("Content-length: " . filesize($filename));
header("Pragma: no-cache");
header("Expires: 0");
readfile("$filename");
}
还要检查用户在要放置zip文件的目录中是否具有写权限。