php / php/php-src

Unexpected Error in ZipArchive::close

Offen
#13,185 1 Kommentar 1 Reaktion 1 zugewiesene Person Auf GitHub ansehen

@remicollet arbeitet bereits daran.

Seit 18.1.2024.

Bug Extension: zip Status: Needs Triage
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.