ZipArchive PHP只添加整个路径中没有目录的文件
研究员:
讨厌问这个问题,我相信正确回答了两次: > Here 所以问题是:当解压缩下载的’file.zip’时,解压后,它包含路径中的所有文件夹,即使很难,我在addFile函数中指定了本地文件.我希望zip文件不包含任何子文件夹,只包含文件. $zipname = str_replace(' ','_',$obj['Name']) . '.zip'; $zip = new ZipArchive(); $zip->open($zipname,ZipArchive::CREATE); foreach ($files as $file) { // $file looks like this: webroot/uploadify/files/file.jpg $zip->addFile($file,pathinfo($file,PATHINFO_BASENAME)); } $zip->close(); header('Content-Description: File Transfer'); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate,post-check=0,pre-check=0'); header("Content-type: application/zip"); header("Content-Disposition: attachment; filename=" . $zipname); header("Pragma: no-cache"); header("Expires: 0"); header('Content-Length: ' . filesize($zipname)); readfile($zipname); 谁能看到这个代码有什么问题? 附加信息: 我,ofc,使用相对于webroot的路径,但在提取的文件夹中的文件夹层次结构之后: PHP 5.4.4 Windows XP,XAMPP 编辑 尝试使用http://www.phpconcept.net/pclzip/库并遇到了同样的问题. 这提出了一个问题:我不知道有任何我应该满足的设置吗?
我运行了你的代码,它按预期工作.所以我可以看到有三件事可能出错.
尝试使用这些标志,以防旧文件仍然存在并且没有被覆盖(不清楚$obj [‘Name’]设置为什么) $zip->open( $zipname,ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ); Pathinfo可能失败并返回整个路径或由于某种原因返回null 是否可以在pathinfo输出上执行var_dump,只是为了确认它是你期望的那样? foreach ( $files as $file ) { var_dump(pathinfo( $file,PATHINFO_BASENAME )); // $file looks like this: webroot/uploadify/files/file.jpg // $zip->addFile( $file,pathinfo( $file,PATHINFO_BASENAME ) ); } 也许你的os / php版本有一个带有addFile功能的错误(不太可能,因为我看不到任何其他解释,所以抓住稻草) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |