カテゴリ: PHP 更新日: 2025/12/10

PHPでZipファイルを作成・展開する方法を初心者向けに解説!ZipArchiveクラスを使った圧縮・解凍の基本

PHP で zip ファイルを作成・展開する方法(ZipArchive)
PHP で zip ファイルを作成・展開する方法(ZipArchive)

先生と生徒の会話形式で理解しよう

生徒

「PHPで複数のファイルをまとめて1つのZipファイルにするにはどうしたらいいですか?」

先生

「PHPにはZipArchiveというクラスがあって、ファイルを圧縮したり、Zipファイルを解凍したりできますよ。」

生徒

「圧縮って何ですか?解凍ってどういう意味ですか?」

先生

「圧縮とは、複数のファイルやフォルダを1つにまとめてサイズを小さくすることです。反対に、解凍とはZipファイルから元のファイルを取り出すことですね。実際に使い方を見ていきましょう!」

-

1. Zipファイルとは?初心者向けに簡単に説明

1. Zipファイルとは?初心者向けに簡単に説明
1. Zipファイルとは?初心者向けに簡単に説明

Zipファイルとは、複数のファイルをひとつにまとめて圧縮(サイズを小さく)できるファイル形式のことです。メールに添付したり、インターネットで配布する時によく使われます。

たとえば、写真が10枚あるとき、1枚ずつ送るのは面倒ですよね?Zipファイルにまとめれば「1個の荷物」として送れるので便利です。

2. PHPのZipArchiveとは?

2. PHPのZipArchiveとは?
2. PHPのZipArchiveとは?

PHPには「ZipArchive(ジップアーカイブ)」という機能が標準で用意されていて、Zipファイルを作ったり、展開(解凍)したりできます。

このZipArchiveクラスを使えば、たとえば「複数のテキストファイルを1つにまとめて保存する」「Zipファイルの中身を取り出す」などが簡単にできます。

3. PHPでZipファイルを作成する方法(基本)

3. PHPでZipファイルを作成する方法(基本)
3. PHPでZipファイルを作成する方法(基本)

まずは、簡単な例からZipファイルを作成してみましょう。ここでは、2つのファイルをひとつのZipにまとめる例です。


<?php
$zip = new ZipArchive();
$zipFileName = 'sample.zip';

if ($zip->open($zipFileName, ZipArchive::CREATE) === TRUE) {
    $zip->addFile('file1.txt');
    $zip->addFile('file2.txt');
    $zip->close();
    echo 'Zipファイルが作成されました。';
} else {
    echo 'Zipファイルの作成に失敗しました。';
}
?>

addFile()は、Zipの中に入れたいファイルを追加するための関数です。

ZipArchive::CREATEは、新しくZipファイルを作るときに使います。

4. Zipファイルにフォルダごと追加するには?

4. Zipファイルにフォルダごと追加するには?
4. Zipファイルにフォルダごと追加するには?

画像やドキュメントなどをフォルダごとZipにしたい場合は、フォルダ内のファイルを1つずつ追加する必要があります。


<?php
$zip = new ZipArchive();
$zip->open('folder.zip', ZipArchive::CREATE);

$files = scandir('myfolder');
foreach ($files as $file) {
    if ($file !== '.' && $file !== '..') {
        $zip->addFile('myfolder/' . $file);
    }
}
$zip->close();
?>

scandir()は、フォルダ内のファイル一覧を取得する関数です。

...は特殊な記号なので、追加しないように条件で除外しています。

-

5. PHPでZipファイルを展開(解凍)する方法

5. PHPでZipファイルを展開(解凍)する方法
5. PHPでZipファイルを展開(解凍)する方法

Zipファイルを作成するだけでなく、Zipファイルを解凍して中身を取り出すこともできます。


<?php
$zip = new ZipArchive();
if ($zip->open('sample.zip') === TRUE) {
    $zip->extractTo('unzipped/');
    $zip->close();
    echo '解凍が完了しました。';
} else {
    echo '解凍に失敗しました。';
}
?>

extractTo()は、Zipファイルの中身をどこに取り出すか指定する関数です。この例ではunzippedフォルダに展開しています。

6. Zipファイルを扱うときの注意点

6. Zipファイルを扱うときの注意点
6. Zipファイルを扱うときの注意点

ZipファイルをPHPで扱うとき、以下のような点に気をつけましょう。

  • ZipArchiveクラスが有効になっているか(PHPの設定)
  • ファイルのパスが正しく指定されているか
  • 書き込み権限のあるフォルダに保存しているか
  • 解凍先のフォルダが存在するか、事前に作っておく

特に初心者の方は、ファイル名の打ち間違いやフォルダの場所を間違えやすいので、コピー&ペーストで入力するのが安心です。

7. 実際の用途や活用例

7. 実際の用途や活用例
7. 実際の用途や活用例

PHPのZipArchiveを使うと、以下のようなシステムが作れます。

  • 写真や資料を一括ダウンロードできるWebアプリ
  • ユーザーがアップロードしたファイルをまとめて保存
  • 日付ごとに自動でバックアップを作成

とても便利なので、Web開発でよく使われる機能のひとつです。

まとめ

まとめ
まとめ

PHPでZipファイルを作成したり解凍したりする処理は、初心者にとって少し難しそうに見えますが、実際にはZipArchiveクラスを理解すると驚くほど扱いやすい機能であることがわかります。今回取り上げたZipファイルの圧縮と展開は、日常的に使われる作業であり、ウェブアプリケーションでも非常に活躍する重要な技術です。たとえば、複数の画像をまとめて保存したり、ユーザーがアップロードした複数ファイルをひとつのZipにまとめて配布する機能など、多くのシステムで応用が可能です。また、バックアップ処理として特定フォルダを自動でZip化して保存するなど、実務でも求められる操作が多く存在します。

ZipArchiveクラスは、ファイルを追加するaddFile()、Zipファイルを開くopen()、作成後に閉じるclose()など、直感的なメソッドで操作できる点も強みです。さらに、フォルダをまとめてZipに追加する場合はscandir()を活用することで、フォルダ内のファイルを一つずつ処理できます。Zipファイルを解凍したい場合にはextractTo()で指定場所に取り出せるため、データの整理や配布にも便利です。

こうした機能は、サーバー内のファイル管理を効率化するうえで欠かせないものであり、Web制作や業務システムの構築など、幅広い場面で活用されます。特に複数ファイルを小さなひとつのZipにまとめるという操作は、サーバーの負担軽減やユーザーの使いやすさ向上にもつながるため、覚えておくと役立つ場面がとても多いのです。以下のサンプルコードでは、Zipファイルの作成からフォルダ追加、解凍までの流れを一つのプログラムとしてまとめていますので、自分で試しながら理解を深める手助けにしてください。

サンプルプログラムまとめ


<?php
$zip = new ZipArchive();
$zipFile = "all.zip";

// Zipを開く(なければ作成)
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {

    // 単体ファイルの追加
    $zip->addFile("file1.txt");
    $zip->addFile("file2.txt");

    // フォルダ内ファイルの追加
    $folder = "docs/";
    $files = scandir($folder);
    foreach ($files as $f) {
        if ($f !== "." && $f !== "..") {
            $zip->addFile($folder . $f);
        }
    }

    $zip->close();
    echo "Zipファイルが完成しました。";
}

// 解凍処理
$unzip = new ZipArchive();
if ($unzip->open($zipFile) === TRUE) {
    $unzip->extractTo("output/");
    $unzip->close();
    echo "解凍が完了しました。";
}
?>

このコードのようにZipArchiveを活用すると、ファイル追加から解凍までの一連の流れをシンプルな記述でまとめられます。初心者の方でも、実際に動かしてみることで圧縮処理の理解が深まり、より複雑な処理にも挑戦しやすくなります。Zipファイルは日常的にも頻繁に使われる形式なので、PHPから扱えるようになると、開発の幅が大きく広がります。

先生と生徒の振り返り会話

生徒
「ZipArchiveって名前だけ見ると難しそうでしたけど、実際はメソッドがわかりやすくて扱いやすいんですね。特にaddFileでどんどん追加できるのが便利だと思いました!」

先生
「そのとおりですね。ZipArchiveはPHPの中でも特に実用性が高い機能で、複数ファイルを効率よく扱うときにとても助けになります。解凍のextractToも覚えておくと作業の幅が広がりますよ。」

生徒
「フォルダをscandirで読み込んでZipに入れる方法もよくわかりました。写真のまとめやバックアップにも使えそうです!」

先生
「良い視点ですね。実務でもフォルダ全体をZip化して保存する処理はよく使われるので、今日の内容は今後とても役立つはずです。」

生徒
「ありがとうございます!自分でもいろいろ試して、もっと複雑なZip操作にも挑戦してみたいです。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHPのマルチバイト文字列を正しく扱う方法!初心者向けにmb_strlenとmb_substrをやさしく解説
New2
PHP
PHP の break, continue の使い方を完全解説!初心者でもわかるループ制御
New3
Python
Pythonで日本の元号を扱う方法を徹底解説!令和・平成の変換もバッチリ対応
New4
Python
Pythonの三項演算子とは?一行で条件分岐を記述する方法
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Python
Pythonのライブラリとは?標準ライブラリとサードパーティライブラリの違いを初心者向けに解説!
No.5
Java&Spring記事人気No5
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.6
Java&Spring記事人気No6
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.7
Java&Spring記事人気No7
PHP
PHP の基本構文(開始タグ・コメント・インデント)を完全ガイド!初心者向け解説
No.8
Java&Spring記事人気No8
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
-
-