初心者でも安心!PHPでZipArchiveをマスターするための8ステップ

PHPのZipArchiveを利用してZIPファイルを操作するイラストPHP
この記事は約8分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読むと、PHPでのZipArchiveの活用方法が身につきます。

Webアプリケーションやシステム開発において、ファイルの圧縮・解凍は必須のスキルです。

そしてその一環として、PHPでZipArchiveクラスを使いこなせるようになることが、あなたのスキルアップに繋がります。

特に今回は初心者の方を対象として、基本から応用まで、手順を追って理解できるように解説します。

●PHPとZipArchiveの基本

○PHPとは

PHPは、Webサイトの開発で広く用いられているプログラミング言語の一つです。

特にサーバーサイドでの処理に強く、HTMLとの連携も容易なため、動的なWebページを作る際には欠かせません。

○ZipArchiveとは

ZipArchiveは、PHPでZIPファイルの操作を行うためのクラスです。

ZIPファイルの作成・解凍、中のファイル情報の取得、パスワードの設定など、多くの機能を提供しています。

●PHPでZipArchiveを使う理由

大量のファイルを一括でダウンロードさせたい場合や、容量を抑えて転送したい場合に、ファイルをZIP形式で圧縮することが一般的です。

PHPでのZipArchiveの利用は、このような要件を簡単に実現するための一助となります。

●ZipArchiveのインストール方法

PHPのバージョン5.2.0以降であれば、ZipArchiveはデフォルトで利用できます。

もし使えない場合は、PHPの拡張モジュールであるphp-zipをインストールすることで利用できるようになります。

●ZipArchiveの基本的な使い方

○ZIPファイルの作成

□サンプルコード1:ZIPファイルの作成

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

if ($res === TRUE) {
    $zip->addFromString('test.txt', 'テスト');
    $zip->close();
    echo 'ZIPファイルの作成に成功しました。';
} else {
    echo 'ZIPファイルの作成に失敗しました。';
}
?>

このサンプルコードでは、新しくZIPファイルを作成し、その中に’test.txt’というテキストファイルを作ります。テキストファイルの中身は’テスト’という文字列になります。

ここで、ZipArchive::CREATEを指定することで、該当するファイルが存在しない場合に新しく作成することができます。

成功すると「ZIPファイルの作成に成功しました。」と出力され、失敗すると「ZIPファイルの作成に失敗しました。」と出力されます。

これを実行すると、’test.zip’というZIPファイルが作成され、その中には’test.txt’というテキストファイルが作成されます。

そのテキストファイルを開くと、中には’テスト’という文字列が書かれています。

○ZIPファイルの解凍

□サンプルコード2:ZIPファイルの解凍

<?php
$zip = new ZipArchive();

if ($zip->open('test.zip') === TRUE) {
    $zip->extractTo('./');
    $zip->close();
    echo 'ZIPファイルの解凍に成功しました。';
} else {
    echo 'ZIPファイルの解凍に失敗しました。';
}
?>

このコードでは、既存のZIPファイルを開き、その内容をカレントディレクトリに解凍します。

openメソッドでZIPファイルを開き、extractToメソッドで解凍先のディレクトリを指定します。

解凍が成功すると「ZIPファイルの解凍に成功しました。」と出力され、失敗すると「ZIPファイルの解凍に失敗しました。」と出力されます。

このコードを実行すると、’test.zip’というZIPファイルが解凍され、その中に含まれる’test.txt’というファイルがカレントディレクトリに配置されます。

○ZIPファイル内の情報取得

ZIPファイルに含まれるファイルやディレクトリの情報を取得することも可能です。

これにより、解凍する前にどのような内容が含まれているか確認できます。

□サンプルコード3:ZIPファイル内の情報取得

<?php
$zip = new ZipArchive();

if ($zip->open('test.zip') === TRUE) {
    for($i = 0; $i < $zip->numFiles; $i++) {
        $stat = $zip->statIndex($i);
        echo 'ファイル名: ' . $stat['name'];
        echo '圧縮サイズ: ' . $stat['comp_size'];
        echo '非圧縮サイズ: ' . $stat['size'];
    }
    $zip->close();
} else {
    echo 'ZIPファイルの開封に失敗しました。';
}
?>

このコードは、ZIPファイル内の各ファイルに対して情報を取得し、その情報を出力します。

numFilesプロパティを使ってZIPファイル内のファイル数を取得し、その数だけループを回します。

各ファイルの情報は、statIndexメソッドを使って取得します。

このメソッドは、ファイル名や圧縮前後のサイズなど、様々な情報を含む配列を返します。

このコードを実行すると、’test.zip’内の各ファイルの名前と、その圧縮前後のサイズが出力されます。

●ZipArchiveの応用例

○ZIPファイルにパスワードを設定する

□サンプルコード4:ZIPファイルにパスワードを設定

<?php
$zip = new ZipArchive();

if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) {
    $zip->addFromString('test.txt', 'テスト');
    $zip->setPassword('password123');
    $zip->close();
    echo 'パスワード設定したZIPファイルの作成に成功しました。';
} else {
    echo 'ZIPファイルの作成に失敗しました。';
}
?>

このコードでは、ZIPファイルにパスワードを設定しています。

具体的には、setPasswordメソッドを用いて、ZIPファイル全体に対してパスワードを設定しています。

設定したパスワードは、ZIPファイルを解凍する際に必要となります。

このコードを実行すると、パスワードが設定されたZIPファイルが作成されます。

このZIPファイルを解凍しようとすると、パスワードの入力が求められます。

○複数のファイルを一つのZIPファイルにまとめる

□サンプルコード5:複数のファイルを一つのZIPファイルにまとめる

<?php
$zip = new ZipArchive();

if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) {
    $zip->addFile('test1.txt');
    $zip->addFile('test2.txt');
    $zip->addFile('test3.txt');
    $zip->close();
    echo '複数ファイルをまとめたZIPファイルの作成に成功しました。';
} else {
    echo 'ZIPファイルの作成に失敗しました。';
}
?>

このコードでは、複数のファイルを一つのZIPファイルにまとめています。

具体的には、addFileメソッドを使って複数のファイルを追加しています。

このメソッドは、ファイルパスを引数に取り、そのファイルをZIPファイルに追加します。

このコードを実行すると、’test1.txt’, ‘test2.txt’, ‘test3.txt’の3つのファイルが一つのZIPファイルにまとめられます。

これにより、複数のファイルを一つのZIPファイルに圧縮して配布したり、保存することが可能になります。

●ZipArchiveの注意点と対処法

ZipArchiveを使う上で注意すべき点として、大量のファイルを扱う場合や大きなファイルを扱う場合にはメモリ消費が増大することがあります。

これはPHPの設定によりメモリ不足となり、処理が途中で停止する可能性があります。

そのため、メモリ設定を適切に管理し、必要に応じて一部のファイルを一時的に解凍したり、ファイルの分割などを行うことが求められます。

また、ZipArchiveではパスワード付きのZIPファイルを作成できますが、そのパスワード保護はZIP 2.0レベルの暗号化しかサポートしておらず、現代の攻撃手法には弱い可能性があるため、機密性の高い情報を扱う際には他の方法を検討することをお勧めします。

●ZipArchiveのカスタマイズ方法

PHPのZipArchiveクラスは、ZIPファイルの作成、解凍、情報取得といった基本的な機能を提供していますが、その他にもさまざまなカスタマイズが可能です。

例えば、ファイルの追加時に圧縮レベルを設定することや、解凍時に指定したディレクトリへの解凍などが可能です。

これらのカスタマイズは、それぞれのメソッドのオプションパラメータを活用することで行うことができます。

まとめ

この記事では、PHPのZipArchiveクラスを使用してZIPファイルの操作を行う方法を解説しました。

このクラスを使えば、ZIPファイルの圧縮・解凍、情報取得、パスワード設定、複数ファイルの一括圧縮など、さまざまな操作が可能になります。

また、ZipArchiveの注意点とカスタマイズ方法についても説明しました。

ここで紹介した知識を基に、ぜひ実際にPHPでZIPファイルを操作してみてください。

そして、あなたのPHPプログラミングスキルをさらに向上させていきましょう。