微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – ZipArchive提取 – 单个文件

我有以下代码

$ipaFile= '/path/file.ipa';
$iconFilePath = "Payload/myapp.app/AppIcon40x40@2x.png"; // the pathway to my image file if the ipa file is unzipped.
$iconFile = "AppIcon40x40@2x.png";
$iconSaveFile = '/path/';

$zip = new ZipArchive();

if ($zip->open($ipaFile) === TRUE) {
    if($zip->locateName($iconFilePath) !== FALSE) {

     $zip->extractTo($iconSaveFile, $iconFile);

    }
}

我的目的是深入到这个压缩文件,只拉出一个图像文件.代码原样在我希望它进入的目录中创建一个新的图像文件(它创建的文件具有正确的名称和扩展名,但它是空白的,0字节).
如果我将$iconFile更改为iconFilePath,那么PHP正确地提取整个路径.在路径的最后是我想要的文件(只提取单个文件),并且它被正确提取.但是,我不希望提取文件前面的文件夹,只需要提取一个文件.

总而言之,我可以正确地提取整个zip存档,我可以正确提取单个文件,但也提取文件文件路径,但我无法正确提取单个文件.

我已经做了很多搜索,我无法发现我的错误.谢谢你的帮助.

解决方法:

ZipArchive :: extractTo()提取整个文件夹结构;你有没有试过ZipArchive::getFromName(),听起来它可能效果更好?

$ipaFile= '/path/file.ipa';
$iconFilePath = "Payload/myapp.app/AppIcon40x40@2x.png"; // the pathway to my image file if the ipa file is unzipped.
$iconFile = "AppIcon40x40@2x.png";
$iconSaveFile = '/path/';

$zip = new ZipArchive();

if ($zip->open($ipaFile) === TRUE) {
    if($iconData = $zip->getFromName($iconFilePath)) {
        file_put_contents("$iconSaveFile$iconFile", $iconData);
    }
}

这是完全未经测试的代码,只是扔掉它!如果这不起作用,并且你知道所涉及的所有路径,你可以在提取后移动文件,不是吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐