php / php/php-src

Unexpected Error in ZipArchive::close

オープン
#13,185 コメント 1 件 リアクション 1 件 担当者 1 名 GitHub で見る

@remicollet がすでに取り組んでいます。

2024年1月18日 から。

Bug Extension: zip Status: Needs Triage
主要言語
C
スター
40.4k
フォーク
8.1k
平均マージ
2日 13時間
マージ済み PR(30日)
96

説明

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

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。