php / php/php-src

Unexpected Error in ZipArchive::close

Aperta
#13,185 1 commento 1 reazione 1 assegnatario Vedi su GitHub

@remicollet ci sta già lavorando.

Dal 18/1/2024.

Bug Extension: zip Status: Needs Triage
Lingua principale
C
Stelle
40.4k
Fork
8.1k
Merge medio
2g 13h
PR unite (30g)
96

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.