我要做的是基本上在我的服务器上提取Zip档案的内容。这是一些代码:
$entry="test.zip";
$zip = new ZipArchive;
if ($zip->open($entry,ZIPARCHIVE::OVERWRITE) === TRUE)
{
$zip->extractTo('unpacked');
$zip->close();
}else
{
echo ‘failed’;
}
目录“unpacked”对每个人都是可写的,ZipArchive类的所有使用方法都返回true。然而,没有提取任何东西。有没有人碰巧有什么可能导致这种行为?任何提示都将受到高度赞赏......提前致谢!
答案 0 :(得分:2)
如果您使用的是PHP 5.2.0或更高版本,可以先检查zlib扩展名http://www.zlib.net/
您还检查了PECL扩展,为了访问ZipArchive,您还可以尝试使用zip_open,zip_read进行检查。
答案 1 :(得分:1)
如果失败,您应该回显$zip
,因为它包含错误。
此外,我猜你可能没有test.zip所需的权限
答案 2 :(得分:1)
如果此代码是内部代码,并且您可以安全地假设您不会将此代码从Linux移动到Windows(反之亦然),您还可以选择执行本地系统命令,这可能会有所帮助解决你的问题。
<?php
echo `unzip myarchive.zip`;
echo `tar -xzf myotherarchive.tar.gz`;
?>
在开发内部使用和/或维护脚本时,我曾经选择直接进行系统调用,因为它更符合系统管理员习惯使用的命令。
答案 3 :(得分:1)
如果您的zip存档很大,有时您无法在服务器允许的最长执行时间内提取所有文件。
唯一的解决方案是,如果你不能改变php.ini中的maximum_execution_time,那就是使用javascript来提取一个文件。在第一个javascript请求中,您获取存档中的文件数
$nbr_of_files = $zip->numFiles;
使用zip存档中每个文件的ID号
提取一个接一个文件后$zip->extractTo('unpacked', array($zip->getNameIndex($file_nbr)));
答案 4 :(得分:0)
请尝试从ZipArchive open方法中删除ZIPARCHIVE :: OVERWRITE标志。 (如果您遵循其他答案中的建议,该标志可能无法按预期运行,可能是问题的根源。)