我正在尝试使用方法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
但我确实需要使用..
的相对路径,因为文件路径是从另一个地方动态加载,我没有控制它们。
答案 0 :(得分:0)
我花了一天左右的时间试图阅读相关文件路径,包括" .."改变目录。如果未提取文件,ZipArchive无法处理这些路径。我想出的最好的解决方案,无需提取Zip,就是使用以下函数来获取所需文件的完整路径:http://php.net/manual/en/function.realpath.php#84012。获得完整的文件路径后,ZipArchive :: getFromName()将能够找到您正在寻找的文件。