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とは触れ合ってこなかったのですが、これを機に・・・いや・・・。