PHPのZipArchiveでopenした際ファイルが作成されていないのにエラーを返してくれないよ

PHPのZipArchiveでopenした際ファイルが作成されていないのにエラーを返してくれないのです。
PHP 5.6.32での出来事でした。

ごく一般的なzipの作成手順です。

$zip_path = dirname(__FILE__).'hoge.zip';
$zip = new ZipArchive();
$is_open = $zip->open($zip_path, ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE);

if($is_open === true) {
    $this->_addFile($zip, $file);
    if($zip->close()) {
        return true;
    } else {
        throw new Exception('zipファイルがクローズできませんでした。');
    }
} else {
    throw new Exception('zipファイルが作成できませんでした。 Status:'.$zip->statusSys);
}

乱暴な例なのでzipのpathの場所については深く考えずにいきます。 まずこちらのプログラムのカレントディレクトリにwriteの権限がない状態でこれを動かすと、当然zipファイルは作成されていません。 希望としてはis_openの時点で作成できなかったよ〜となってほしいのですが、エラーがでずに進みます。 作成後に$zipのstatusを確認しても「0」(No Error)です。

なんとこのままaddFileもできるけど、$zip->closeではエラーが返ってくる。 実体がないからだと思うけど、falseが返ってくるだけなので何がいけないってことなのかしらね。 このへんを見ると挙動が理解できそうなのですが・・・。

https://github.com/php/php-src/blob/master/ext/zip/lib/zip_open.c
https://github.com/php/php-src/blob/master/ext/zip/lib/zip_close.c
Cとは触れ合ってこなかったのですが、これを機に・・・いや・・・。


Profile picture

ぴーやま
プログラミングを嗜んでします。中華料理で出てくるたまごふわふわのコーンスープが好きです。