以下代码将无法在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");

最佳答案

语义似乎有所变化;目前尚不清楚这是故意的还是错误的。

无论如何,问题在于我们有一个空文件,该文件不是有效的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");

09-20 12:29