我要做的基本上是提取服务器上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。然而,没有提取任何内容。有人知道是什么导致了这种行为吗?任何提示都将不胜感激。。。提前感谢!
如果您使用的是PHP 5.2.0或更高版本,您可以先检查zlib扩展吗http://www.zlib.net/
您还可以检查PECL扩展,为了访问ZipArchive,您还可以尝试zip_open、zip_read进行检查。
如果此代码是内部代码,并且您可以安全地假设不会将此代码从Linux移动到Windows(反之亦然),那么您还可以选择执行本地系统命令,这可能有助于解决您的问题。
<?php
echo `unzip myarchive.zip`;
echo `tar -xzf myotherarchive.tar.gz`;
?>
在开发内部使用和/或维护脚本时,我曾经选择直接的系统调用,因为它更符合系统管理员习惯使用的命令。
如果失败,您应该回显$zip
,因为它包含错误。此外,我猜您可能没有test.zip 所需的权限
如果您的zip存档很大,有时您无法在服务器允许的最长执行时间内提取所有文件。
如果无法更改php.ini中的maximum_execution_time,唯一的解决方案是使用javascript逐个提取文件。在第一个javascript请求中,您获取存档中的文件数
$nbr_of_files = $zip->numFiles;
在使用每个文件的zip存档中的id号提取一个又一个文件之后,
$zip->extractTo('unpacked', array($zip->getNameIndex($file_nbr)));
我也遇到了同样的问题。解决方案:
$zip->extractTo(public_path() .'/restoreDb/extracted/');
添加CCD_ 2辅助函数。