サーバー上のファイルを圧縮するために、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
アーカイブファイルを展開するとフルパスが保存されている
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
便利ですが、初めてでは戸惑うことが多いです。