PHP - 解压缩/打开 returns 整数
PHP - unzip / open returns integer
我正在尝试从 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 === TRUE)
{
$z->extractTo("my_path/");
$z->close();
}
else
{
echo "failed";
}
}
zip 文件存在于指定位置,因为显示“正在提取”,但 $res
变量 return 19 作为整数,脚本以回显“失败”结束。
如果我跳过 $res === TRUE
行,我会收到以下消息:
Warning: ZipArchive::extractTo(): Invalid or uninitialized Zip object
你看到这个对象有什么问题了吗?
ZipArchive::open()
returns bool|int
(参见 https://www.php.net/manual/en/ziparchive.open.php#refsect1-ziparchive.open-returnvalues)。
return 值为 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 中提取一个 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 === TRUE)
{
$z->extractTo("my_path/");
$z->close();
}
else
{
echo "failed";
}
}
zip 文件存在于指定位置,因为显示“正在提取”,但 $res
变量 return 19 作为整数,脚本以回显“失败”结束。
如果我跳过 $res === TRUE
行,我会收到以下消息:
Warning: ZipArchive::extractTo(): Invalid or uninitialized Zip object
你看到这个对象有什么问题了吗?
ZipArchive::open()
returns bool|int
(参见 https://www.php.net/manual/en/ziparchive.open.php#refsect1-ziparchive.open-returnvalues)。
return 值为 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
}