Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

PHPで外部ライブラリ(libzip)を組み込んで利用する

PHPエクステンションの作り方 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/12/20 14:00

 本連載では、PHPエクステンションの作成方法を紹介します。前回は、PHPエクステンションを利用してクラスを作成する方法を紹介しました。今回はそのクラスを利用し、また、外部のネイティブライブラリを使用してクラスのメソッドを実装します。また、その開発時に必要になる応用を紹介します。

目次

対象読者

 PHPでの基本構文を理解している方で、PHPエクステンションに興味がある方、さらに深くPHPを知りたい方で、C言語の基本的な構文を理解している方を対象としています。

必要な環境

 この記事では、PHP 5.4を使用し、Linux環境で確認を行っています。インストール方法は初回を参照してください。

作成するサンプルの概要

 今回作成するサンプルは、前回の『PHPエクステンションでクラスを作成する』で作成したサンプルを元に、実際にzipファイルの中身を読むサンプルを作成します。それらのサンプルを通じて、以下のことを紹介します。

  • 外部ライブラリ(今回はlibzip)を組み込む方法
  • クラスのメソッドで、引数と戻り値にクラスのインスタンスを利用する方法
  • データの読込をphpのストリームを通じて行う方法

モジュールを構成するソース一覧

 今回のサンプルモジュールを構成するソースは以下のようになっており、前回のサンプルからpzip_stream.cファイルが追加されています。

サンプルコード一覧
ソース名 PHP上の
クラス名
説明
php_pzip.h -- ヘッダファイル
pzip.c -- モジュール全体のファイル
(前回のサンプルと変わりありません)
pzip_file.c PZipFile ZIPファイル全体を扱うためのクラスを実装するソース
pzip_entry.c PZipEntry ZIPファイル内の一つのエントリーを扱うためのクラスを実装するソース
pzip_stream.c -- ZIPファイル内の一つのファイルデータを扱うための
PHPストリームを実装するためのソース

PHPでの利用イメージ

 今回のサンプルコードは、ZIPファイルの読み込みのみであり、書き込みや変更などは考慮せずに、PHPから以下のように使われることを想定します。

PHPからの利用想定
$zip_file = new PZipFile();
$ok = $zip_file->open("sample/test2.zip");      // ……(1)
if($ok){
  $zip_file->setPassword("abcdefg");            // ……(2)
  $num = $zip_file->numChildren();              // ……(3)
  for($i = 0; $i < $num; $i++){
    // ZipEntryクラスがリターンされる
    $entry = $pzip_file->getEntry($i);          // ……(4)
    $info = $entry->getStat();                  // ……(5)

    $fp = $pzip_file->getStream($entry);        // ……(6)
    if($fp){
      $data = fread($fp,$info['size']);         // ……(7)
      print $data;
      fclose($fp);
    }
  }
  $zip_file->close();                           // ……(8)
}

 以下のような流れで利用します。

 (1)ZIPファイルをオープンします。

 (2)ZIPファイルの解凍時のパスワードを設定します。

 (3)ZIPファイル内のエントリー数を取得します。

 (4)エントリーを管理するクラス(PZipEntry)のインスタンスを取得します。

 (5)エントリーの詳細を取得します。詳細は配列で取得します(ZipArchive::statIndexと同様の結果)。

 (6)エントリーのファイルをオープンします。

 (7)ファイルを読み込みます。

 (8)ZIPファイルをクローズします。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2012年2月時点での登録メンバは37名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:PHPエクステンションの作り方

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5