ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:ZipArchiveを利用した際に戸惑った点

スポンサーリンク

サーバー上のファイルを圧縮するために、ZipArchiveを初めて利用しました。
利用した際、以下の2点に戸惑いました。

アーカイブの作成先のパーミッションが無くてもopenに成功する

$zip = new ZipArchive;
$res = $zip->open("/home/usr/test/zip/test.zip");

として、/home/usr/test/zip/に書き込む権限がなくても、エラーになりませんでした。
マニュアルには、エラーコードとして、

ZipArchive::ER_OPEN
ファイルを開けません。

とありましたが、発生しませんでした。
パスが存在するかどうかしか確認していないのでしょうか。
PHP: ZipArchive::open - Manual

f:id:AJYA:20180620124505p:plain
unsplash-logoSamuel Zeller

アーカイブファイルを展開するとフルパスが保存されている

ZIPファイルが作成できたのでダウンロードし、展開すると、圧縮時に指定したファイルのフルパスがフォルダとして作成され、最下層のフォルダ内にファイルが作成されていました。

圧縮するファイルは、

$zip = new ZipArchive;
$res = $zip->open("/home/usr/test/zip/test.zip");
$zip->addFile("/home/usr/test/index.txt");

のようにaddFile()でパス付きで指定しています。

どうすればいいかと考えて、addFile()の第2引数を

$zip = new ZipArchive;
$res = $zip->open("/home/usr/test/zip/test.zip");
$zip->addFile("/home/usr/test/index.txt", "index.txt");

として試したところファイルのフルパスはフォルダとして作成されず、ファイルが作成されました。
PHP: ZipArchive::addFile - Manual


便利ですが、初めてでは戸惑うことが多いです。