我知道有很多关于ZipArchive的问题以及它是如何工作的但是在完成所有这些之后我仍然无法使我的程序工作。
我不知道我哪里出错了,因为我已经死了,并且没有一个被激活。
$path = "/export/scripts/CLOUD/logs/web/Private_Testbox/Jan_28_2013_16_20_44_atvts78_rollout_config/";
$fileName = explode('/', $path);
$zipname = $fileName[count($fileName) - 2];
$zip = new ZipArchive;
$handle = opendir($path);
//Check whether Zip can be opened
if ($zip->open($zipname, ZIPARCHIVE::CREATE) !== TRUE) {
die("Could not open archive");
}
//Add all files to an array
while ($file = readdir($handle))
{
$zip->addFile($path, $file);
}
closedir($handle);
$zip->close();
//Send zip folder
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipname . '.zip');
readfile($zip);
此文件下载zip文件夹,但其中没有任何内容。
提前感谢您的帮助。
答案 0 :(得分:1)
您在die()
电话上忘记了->addFile()
,这意味着您假设文件实际已添加。
readfile()不返回目录中文件的完整路径,只返回实际的“本地”文件名,这意味着您要添加脚本当前工作目录中不存在的文件。尝试:
$zip->addFile($file, $path . $file);
^^^^^^^^^^^^^^^^^^^^^
代替。就目前而言,您的代码使用$path
作为嵌入zip的文件名,目录不能用作文件名。如果没有$path . $file
,addFile会查找错误的位置,例如相反,它相当于getcwd() . $file
。