ダウンロード サンプルファイル (9.7 KB)
本連載では、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から以下のように使われることを想定します。
$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ファイルをクローズします。
この記事は参考になりましたか?
- PHPエクステンションの作り方連載記事一覧
-
- PHPエクステンションのエラー処理
- PHPでのストリーム処理の実装
- PHPで外部ライブラリ(libzip)を組み込んで利用する
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)
< WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
