php / php/php-src

Unexpected Error in ZipArchive::close

Abierto
#13,185 1 comentario 1 reacción 1 asignado Ver en GitHub

@remicollet ya está trabajando en esto.

Desde el 18/1/2024.

Bug Extension: zip Status: Needs Triage
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.1k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.