Open
Description
Description
There seems to have been a change between Php7 and Php8 whereby ZipArchive::close can issue a fatal error rather than a warning. This is a big change in behavior. Was it intended? Nothing in the documentation for the method suggests an error, let alone a fatal error, can be issued. The second close
below is obviously wrong and should return false, but why should it be treated as fatal?
The following code:
<?php
$zip = new ZipArchive();
$res = $zip->open('zzip.zip', ZipArchive::OVERWRITE | ZipArchive::CREATE);
if ($res !== true) {
echo "open failed result=$res\n";
exit(1);
}
$zip->addFromString('test.txt', 'file content goes here');
$zip->close();
$x = @$zip->close();
var_dump($x);
Resulted in this output:
Fatal error: Uncaught ValueError: Invalid or uninitialized Zip object in C:\git\zzip.php on line 10
ValueError: Invalid or uninitialized Zip object in C:\git\zzip.php on line 10
Call Stack:
0.0002 394520 1. {main}() C:\git\zzip.php:0
0.0085 395152 2. ZipArchive->close() C:\git\zzip.php:10
But I expected this output instead (as with Php7):
C:\git\zzip.php:11:
bool(false)
PHP Version
All Php8
Operating System
Windows, but probably all