アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

zipファイルを生成する

PHPでzipファイルを作る機会があったのでメモ。

関数化したので次からこれ使おう。

<?

/*
 * makeZip
 *
 * @param files    zipに詰めたいファイル情報の配列
 *                 ただし、ファイル情報は
 *                   array('file_path' => "ファイルパス", 'zip_file_name' => "zip内でのファイル名")
 *                 という配列で表す
 * @param zip_path zipのパス
 * @return 正常ならtrue、失敗したらfalse
 */
function makeZip($files, $zip_path, $mode = 0755)
{
    // 既にファイルが存在する場合は削除
    if (file_exists($zip_path))
    {
        @unlink($zip_path);
    }

    // ZipArchiveはPHP5.2以降なら標準で使用可能
    $zip = new ZipArchive();

    // オープンできなければエラー終了
    if ($res = $zip->open($zip_path, ZipArchive::CREATE) !== true)
    {
        return false;
    }

    // 渡されたファイルを順番にzipに詰める
    foreach ($files as $file)
    {
        // 詰めるのに失敗したらエラー終了
        if ($zip->addFile($file['file_path'], $file['zip_file_name']) == false)
        {
            $zip->close();
            @unlink($zip_path);
            return false;
        }
    }

    // クローズしてパーミッション変更
    $zip->close();
    chmod($zip_path, $mode);

    // 正常終了
    return true;
}

呼び出し部分の例

<?

$file_list = array();

$file_list[] = array(
    'zip_file_name' => "test01.jpg",
    'file_path'     => "./files/test01.jpg",
);
$file_list[] = array(
    'zip_file_name' => "test02.jpg",
    'file_path'     => "./files/test02.jpg",
);

$this->makeZip($file_list, "./zip/test.zip");