PHP-unzip/open返回整数
我试图从zip中提取csv文件,在下面的代码中,我总是得到一个整数而不是布尔值PHP-unzip/open返回整数,php,unzip,Php,Unzip,我试图从zip中提取csv文件,在下面的代码中,我总是得到一个整数而不是布尔值 $zip = "path_to_zip/zip.zip"; if (file_exists($zip)) { echo "Extracting"; $z = new ZipArchive; $res = $z->open($zip); var_dump($res); if ($res === TR
$zip = "path_to_zip/zip.zip";
if (file_exists($zip))
{
echo "Extracting";
$z = new ZipArchive;
$res = $z->open($zip);
var_dump($res);
if ($res === TRUE)
{
$z->extractTo("my_path/");
$z->close();
}
else
{
echo "failed";
}
}
当显示“Extraction”(提取)时,zip文件存在于指定的位置,但$res
变量返回19作为整数,脚本以回显“failed”(失败)结束
如果我用$res===TRUE
跳过该行,我会得到以下消息:
Warning: ZipArchive::extractTo(): Invalid or uninitialized Zip object
您看到该对象有什么问题了吗?ZipArchive::open()
返回bool | int
(请参阅)
返回值为true
或常量值
如果绕过测试,$res===TRUE
,$z
未准备好执行操作(“无效或未初始化的Zip对象”)。
您需要检查它。
信息19是常量ZipArchive::ER_NOZIP(“非zip存档”)的值。
因此,$zip
不是有效的zip文件
要更好地查看错误状态,可以执行以下操作:
$z = new ZipArchive;
$res = $z->open($zip);
if ($res !== true)
{
switch($res) {
case ZipArchive::ER_EXISTS:
echo 'File already exists.';
break;
case ZipArchive::ER_INCONS:
echo 'Zip archive inconsistent.';
break;
case ZipArchive::ER_INVAL:
echo 'Invalid argument.';
break;
case ZipArchive::ER_MEMORY:
echo 'Malloc failure.';
break;
case ZipArchive::ER_NOENT:
echo 'No such file.';
break;
case ZipArchive::ER_NOZIP:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo 'Not a zip archive but a ' . finfo_file($finfo, $zip);
break;
case ZipArchive::ER_OPEN:
echo 'Can\'t open file.';
break;
case ZipArchive::ER_READ:
echo 'Read error.';
break;
case ZipArchive::ER_SEEK:
echo 'Seek error.';
break;
}
}
else
{
// do stuff
}
谢谢,这很奇怪,因为如果我手动提取zip文件,它就可以工作了。尺寸会有问题吗?我不这么认为。您确定它是真正的zip格式,还是其他扩展名为.zip的存档格式?什么是
$finfo=finfo\u打开的(FILEINFO\u MIME\u类型);echo finfo_文件($finfo,$zip)代码>返回?啊!这是一个很好的猜测,它返回application/x-gzip,而我从中检索它的web服务指定了zip。我将检查是否可以获取该文件的其他版本。谢谢你给我指出了正确的方向。完成:)提供zip的公司肯定有问题,无论我选择哪种类型的文件,它总是gzip。我将改编我的剧本,谢谢!