ZipArchive PHP只添加整个路径中没有目录的文件

前端之家收集整理的这篇文章主要介绍了ZipArchive PHP只添加整个路径中没有目录的文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
研究员:

讨厌问这个问题,我相信正确回答了两次:

> Here
> And here

所以问题是:当解压缩下载的’file.zip’时,解压后,它包含路径中的所有文件夹,即使很难,我在addFile函数中指定了本地文件.我希望zip文件不包含任何子文件夹,只包含文件.

  1. $zipname = str_replace(' ','_',$obj['Name']) . '.zip';
  2.  
  3. $zip = new ZipArchive();
  4.  
  5. $zip->open($zipname,ZipArchive::CREATE);
  6. foreach ($files as $file) {
  7. // $file looks like this: webroot/uploadify/files/file.jpg
  8. $zip->addFile($file,pathinfo($file,PATHINFO_BASENAME));
  9. }
  10.  
  11. $zip->close();
  12.  
  13. header('Content-Description: File Transfer');
  14. header('Content-Transfer-Encoding: binary');
  15. header('Cache-Control: must-revalidate,post-check=0,pre-check=0');
  16. header("Content-type: application/zip");
  17. header("Content-Disposition: attachment; filename=" . $zipname);
  18. header("Pragma: no-cache");
  19. header("Expires: 0");
  20. header('Content-Length: ' . filesize($zipname));
  21.  
  22. readfile($zipname);

谁能看到这个代码有什么问题?

附加信息:

我,ofc,使用相对于webroot的路径,但在提取文件夹中的文件夹层次结构之后:
提取文件 – > ‘my_file.zip’
是C-> xampp-> htdocs-> my_cakePHP_web_app-> app-> webroot->文件,这不是我想要实现的:)

PHP 5.4.4

Windows XP,XAMPP

编辑

尝试使用http://www.phpconcept.net/pclzip/库并遇到了同样的问题.
在我的家用电脑(win7)上,这段代码运行良好.

这提出了一个问题:我不知道有任何我应该满足的设置吗?

我运行了你的代码,它按预期工作.所以我可以看到有三件事可能出错.

尝试使用这些标志,以防旧文件仍然存在并且没有被覆盖(不清楚$obj [‘Name’]设置为什么)
如果您阅读PHP手册中的注释,使用ZIPARCHIVE :: CREATE vs ZIPARCHIVE :: OVERWRITE会有不同程度的成功,所以使用两者都可以.

  1. $zip->open( $zipname,ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE );

Pathinfo可能失败并返回整个路径或由于某种原因返回null

是否可以在pathinfo输出上执行var_dump,只是为了确认它是你期望的那样?

  1. foreach ( $files as $file )
  2. {
  3. var_dump(pathinfo( $file,PATHINFO_BASENAME ));
  4.  
  5. // $file looks like this: webroot/uploadify/files/file.jpg
  6. // $zip->addFile( $file,pathinfo( $file,PATHINFO_BASENAME ) );
  7. }

也许你的os / PHP版本有一个带有addFile功能错误(不太可能,因为我看不到任何其他解释,所以抓住稻草)

猜你在找的PHP相关文章