Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】PharFileInfo::getMetadata()メソッドの使い方

getMetadataメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getMetadataメソッドは、PHAR(ピーエイチエーアール)アーカイブ内の個々のファイルまたはディレクトリに付加されたユーザー定義のメタデータを取得するメソッドです。PHARアーカイブは、PHPのコードや関連リソースを一つのファイルにまとめるための実行可能なアーカイブ形式です。

このメソッドはPharFileInfoクラスに属しており、PHARアーカイブ内の特定の項目に関する情報を操作する際に利用されます。取得されるメタデータとは、ファイルの内容そのものではなく、そのファイルやディレクトリに関連付けられた追加の情報や設定のことです。例えば、バージョン番号、作成者情報、カスタムフラグなど、プログラマーが自由に定義した任意のPHPデータ(配列やオブジェクトなど)を含めることができます。

getMetadataメソッドは、PHARアーカイブ内に保存されているシリアライズ(データが保存可能な形式に変換された状態)されたメタデータを自動的にデシリアライズ(元のデータ形式に戻す)し、PHPの元のデータ型として返します。もし、対象となるファイルやディレクトリにメタデータが設定されていない場合には、このメソッドはnullを返します。これにより、PHARアーカイブ内の各要素に対して柔軟に情報を付与し、その情報をプログラムから簡単に読み取って活用することが可能になります。

構文(syntax)

1<?php
2
3// $fileInfo は PharFileInfo クラスのインスタンスであると仮定します。
4// このインスタンスは通常、Pharアーカイブ($phar)から特定のファイルパスを指定して取得されます。
5// 例: $fileInfo = $phar['path/to/file.txt'];
6
7$metadata = $fileInfo->getMetadata();
8
9// $metadata には、ファイルに紐付けられたメタデータがデシリアライズされた状態で格納されます。
10// メタデータが存在しない場合、または無効な場合は null が返されます。
11// 通常、メタデータは配列ですが、Phar::addFile() や Phar::addFromString() で設定された任意の型が可能です。
12var_dump($metadata);
13
14?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

mixed

PharFileInfo::getMetadata() は、この Phar アーカイブエントリに格納されているメタデータを返します。メタデータは、float, integer, string, array, null のいずれかの型で返されます。

サンプルコード

PharFileInfo::getMetadata()でメタデータを取得する

1<?php
2
3/**
4 * Pharアーカイブを作成し、ファイルにメタデータを設定した後、
5 * 設定されたメタデータを取得して表示するサンプル関数です。
6 *
7 * この関数は、Pharアーカイブの基本的な作成、ファイル追加、
8 * そのファイルエントリへのメタデータ設定、そしてPharFileInfo::getMetadata()
9 * メソッドを使ったメタデータの読み取り方法を示します。
10 */
11function demonstratePharMetadataHandling(): void
12{
13    // 一時的なPharアーカイブのファイル名
14    $pharFileName = 'my_sample_archive.phar';
15    // アーカイブ内に格納するファイルのパス
16    $filePathInPhar = 'data.txt';
17
18    try {
19        // 1. Pharアーカイブを新規作成し、書き込みモードで開きます。
20        // 第1引数: 作成するPharアーカイブのファイル名
21        // 第2引数: 0 (Flags、デフォルト値)
22        // 第3引数: このPharアーカイブを識別するためのエイリアス名
23        $phar = new Phar($pharFileName, 0, 'my_sample_archive.phar');
24
25        // Pharアーカイブへの書き込み操作を開始します。
26        // これにより、複数のファイル追加やメタデータ設定を一括で行い、
27        // 最後にまとめてディスクに書き込むことができます。
28        $phar->startBuffering();
29
30        // 2. ファイルをアーカイブに追加し、そのファイルエントリにメタデータを設定します。
31        $fileContent = "これはPharアーカイブ内のサンプルデータです。\n";
32        // アーカイブ内のファイルエントリに関連付けるメタデータ
33        $entryMetadata = [
34            'author' => 'Sample User',
35            'version' => '1.0.0',
36            'created_at' => date('Y-m-d H:i:s')
37        ];
38
39        // 文字列としてファイルをアーカイブに追加します。
40        $phar->addFromString($filePathInPhar, $fileContent);
41
42        // 追加したファイルエントリ($filePathInPhar)にメタデータを設定します。
43        // このメタデータは、後でPharFileInfo::getMetadata() を使って取得できます。
44        $phar->setMetadata($filePathInPhar, $entryMetadata);
45
46        // 3. Pharアーカイブへの書き込み操作を終了し、変更をディスクに保存します。
47        $phar->stopBuffering();
48
49        echo "Pharアーカイブ '{$pharFileName}' が作成されました。\n";
50        echo "ファイル '{$filePathInPhar}' がメタデータと共にアーカイブに追加されました。\n\n";
51
52        // ----------------------------------------------------------------------
53        // ここから、作成したPharアーカイブからメタデータを読み取る部分
54        // ----------------------------------------------------------------------
55
56        // 4. 作成したPharアーカイブを読み込みモードで再度開きます。
57        // (同じPharオブジェクトを使い回すことも可能ですが、ここでは明確化のため再インスタンス化)
58        $pharReader = new Phar($pharFileName);
59
60        // 5. 特定のファイルのエントリに対応するPharFileInfoオブジェクトを取得します。
61        // Phar::offsetGet() は、アーカイブ内の指定されたパスに対応する
62        // SplFileInfoオブジェクト(PharFileInfoのインスタンス)を返します。
63        $pharFileInfo = $pharReader->offsetGet($filePathInPhar);
64
65        // 6. PharFileInfo::getMetadata() メソッドを呼び出して、
66        // ファイルエントリに設定されたメタデータを取得します。
67        $retrievedMetadata = $pharFileInfo->getMetadata();
68
69        echo "Pharアーカイブからファイルエントリのメタデータを取得します。\n";
70        if ($retrievedMetadata !== null) {
71            echo "ファイル '{$filePathInPhar}' に設定されていたメタデータ:\n";
72            print_r($retrievedMetadata);
73        } else {
74            echo "ファイル '{$filePathInPhar}' にはメタデータが設定されていませんでした。\n";
75        }
76
77    } catch (PharException $e) {
78        // Phar関連の操作で発生する可能性のある例外をキャッチします。
79        echo "Phar操作中にエラーが発生しました: " . $e->getMessage() . "\n";
80    } catch (Exception $e) {
81        // その他の一般的なエラーをキャッチします。
82        echo "予期せぬエラーが発生しました: " . $e->getMessage() . "\n";
83    } finally {
84        // 後処理: 作成した一時的なPharアーカイブファイルを削除します。
85        if (file_exists($pharFileName)) {
86            unlink($pharFileName);
87            echo "\n一時的なPharアーカイブ '{$pharFileName}' を削除しました。\n";
88        }
89    }
90}
91
92// 上記のサンプル関数を実行します。
93demonstratePharMetadataHandling();
94
95?>

このサンプルコードは、PHPのPharアーカイブ内でファイルに設定されたメタデータを取得する方法を、システムエンジニアを目指す初心者にも分かりやすく示しています。Phar(PHP Archive)とは、複数のPHPファイルや関連ファイルを一つのアーカイブファイルにまとめる機能です。

まず、サンプルコードでは新しいPharアーカイブを作成し、data.txtというファイルをアーカイブに追加します。この際、Phar::setMetadata()メソッドを使って、このファイルエントリに作成者やバージョンなどの情報を「メタデータ」として設定しています。

その後、設定されたメタデータを実際に読み取るために、PharFileInfo::getMetadata()メソッドを使用します。このメソッドは、アーカイブ内の特定のファイルに関する情報を持つPharFileInfoオブジェクトから呼び出されます。getMetadata()メソッドは引数を一切取らず、ファイルに設定されているメタデータを返します。戻り値の型はmixedであり、設定されたメタデータが配列などの形式で返されます。もし、ファイルにメタデータが設定されていない場合はnullを返します。

サンプルコードの実行結果では、data.txtに設定されたメタデータが正確に取得され、表示されていることが確認できます。このようにPharFileInfo::getMetadata()は、Pharアーカイブ内の各ファイルエントリに付随する追加情報をプログラムから簡単に取得するために利用されます。

getMetadataメソッドは、Pharアーカイブ内の特定のファイルに紐付けられた追加情報(メタデータ)を取得する際に利用します。この情報を取得するためには、事前にPharオブジェクトのsetMetadataメソッドを使って、そのファイルにメタデータを設定しておく必要があります。メタデータが設定されていない状態でgetMetadataを呼び出すと、nullが返されますので、取得後の戻り値は常に確認し、適切な処理を行うように注意してください。戻り値の型はmixedであるため、どんなデータ形式でも格納可能ですが、取得したメタデータの具体的な構造や型をあらかじめ把握し、それに応じた安全なデータ利用を心がけることが重要です。また、Pharアーカイブの作成や操作には、PHPのphar拡張が有効であることと、ファイルシステムへの適切な書き込み・読み込み権限が必要です。

関連コンテンツ