PHP ZipArchive getFromName无法读取具有相对路径的文件

时间:2016-06-01 15:39:49

标签: php linux zip ziparchive

我正在尝试使用方法getFromName从ZipArchive读取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但我确实需要使用..的相对路径,因为文件路径是从另一个地方动态加载,我没有控制它们。

1 个答案:

答案 0 :(得分:0)

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