【问题标题】:PHP ZipArchive getFromName can't read file with relative pathPHP ZipArchive getFromName 无法读取具有相对路径的文件
【发布时间】:2016-06-01 15:39:48
【问题描述】:

我正在尝试使用 ZipArchive 使用 getFromName 方法从 zip 文件中读取文件内容。我的文件名中有一个双点 (..)。这是我的代码:

$zip = new ZipArchive();

$zip->open('book.zip');

$content = $zip->getFromName('book/html/../README.md');

var_dump($content);

我的 zip 文件的结构是这样的:

Archive:  book.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2016-06-01 11:09   book/
        0  2016-06-01 11:02   book/html/
     1855  2016-06-01 11:02   book/html/composer.json
     2354  2016-06-01 11:09   book/README.md
---------                     -------
     4209                     4 files

我的 PHP 脚本与我的 zip 文件位于同一目录中。 当我尝试列出使用 Linux 命令压缩的文件夹中的文件时,如下所示:

ls -l book/html/../README.md 

完美运行。我不明白为什么 ZipArchive 不能正确读取这个相对路径。

注意:我知道我可以使用绝对路径读取文件:book/README.md,但我确实需要使用带有.. 的相对路径,因为文件路径是从另一个动态加载的地点,我无法控制它们。

【问题讨论】:

    标签: php linux zip ziparchive


    【解决方案1】:

    我花了一天左右的时间来解决类似的问题,试图读取包括“..”更改目录在内的相关文件路径。如果未提取文件,ZipArchive 将无法处理这些路径。我想出的最好的解决方案是使用以下函数来获取所需文件的完整路径:http://php.net/manual/en/function.realpath.php#84012。获取完整文件路径后,ZipArchive::getFromName() 将能够找到您要查找的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多