ZipArchive::getStatusString(): 无效或未初始化的 Zip 对象
ZipArchive::getStatusString(): Invalid or uninitialized Zip object
以下代码将无法在 PHP 5.6.12 中创建 ZIP 文件,也将无法打印出 ZIP 错误消息,而是显示错误/警告
Warning: ZipArchive::getStatusString(): Invalid or uninitialized Zip object in /tmp/x.php on line 9
但是为什么呢?这曾经在 PHP 5.4.
中有效
<?php
// TODO: Check for errors
$tempPath = tempnam('/tmp', 'ztmp');
$zip = new ZipArchive();
$res = $zip->open($tempPath, ZipArchive::OVERWRITE | ZipArchive::CREATE | ZipArchive::EXCL);
if ( $res !== true )
die($zip->getStatusString()."\n");
看起来语义有所改变;不清楚是故意的还是bug。
无论如何,问题是我们有一个空文件,它不是有效的 ZIP,但它仍然被打开并且没有正确初始化,即使我们请求覆盖该文件。
因此解决方法或解决方法是删除现有文件,然后重新创建它:
<?php
$tempPath = tempnam('/tmp', 'ztmp');
// Delete first
@unlink($tempPath);
$zip = new ZipArchive();
$res = $zip->open($tempPath, ZipArchive::OVERWRITE | ZipArchive::CREATE | ZipArchive::EXCL);
if ( $res !== true )
die($zip->getStatusString()."\n");
我知道这已经一年了,但我注意到这里使用了 ZipArchive::EXCL。
http://php.net/manual/en/zip.constants.php
ZipArchive::EXCL (integer)
Error if archive already exists.
以下代码将无法在 PHP 5.6.12 中创建 ZIP 文件,也将无法打印出 ZIP 错误消息,而是显示错误/警告
Warning: ZipArchive::getStatusString(): Invalid or uninitialized Zip object in /tmp/x.php on line 9
但是为什么呢?这曾经在 PHP 5.4.
中有效<?php
// TODO: Check for errors
$tempPath = tempnam('/tmp', 'ztmp');
$zip = new ZipArchive();
$res = $zip->open($tempPath, ZipArchive::OVERWRITE | ZipArchive::CREATE | ZipArchive::EXCL);
if ( $res !== true )
die($zip->getStatusString()."\n");
看起来语义有所改变;不清楚是故意的还是bug。
无论如何,问题是我们有一个空文件,它不是有效的 ZIP,但它仍然被打开并且没有正确初始化,即使我们请求覆盖该文件。
因此解决方法或解决方法是删除现有文件,然后重新创建它:
<?php
$tempPath = tempnam('/tmp', 'ztmp');
// Delete first
@unlink($tempPath);
$zip = new ZipArchive();
$res = $zip->open($tempPath, ZipArchive::OVERWRITE | ZipArchive::CREATE | ZipArchive::EXCL);
if ( $res !== true )
die($zip->getStatusString()."\n");
我知道这已经一年了,但我注意到这里使用了 ZipArchive::EXCL。
http://php.net/manual/en/zip.constants.php
ZipArchive::EXCL (integer)
Error if archive already exists.