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

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

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

作成日: 更新日:

基本的な使い方

getMetadataメソッドは、Pharアーカイブのグローバルなメタデータを取得するメソッドです。Pharアーカイブとは、複数のPHPファイルや関連リソースを単一のファイルにまとめたもので、アプリケーションの配布やデプロイを容易にするために利用されます。このメソッドが取得するメタデータは、Pharアーカイブ全体に付随する追加情報であり、例えばアーカイブのバージョン、作成者、特別な設定など、開発者がそのPharファイルに埋め込んだ任意のデータを含めることができます。

getMetadataメソッドを呼び出すと、これらのメタデータがPHPのシリアライズ形式で返されます。通常、返されたデータはunserialize関数などを用いて元のPHPのデータ構造(配列やオブジェクトなど)に復元し、プログラム内で利用します。もしPharアーカイブにグローバルなメタデータが設定されていない場合は、このメソッドはNULLを返します。この機能を利用することで、プログラムは実行時にPharアーカイブの性質を動的に判断し、適切な処理を行うことが可能になります。これは、ライブラリやフレームワークがPhar形式で配布される際に、その内部情報をプログラム側で利用するために特に重要です。

構文(syntax)

1<?php
2$phar = new Phar('your_archive_name.phar');
3$metadata = $phar->getMetadata();

引数(parameters)

引数なし

引数はありません

戻り値(return)

mixed

Phar::getMetadata は、Phar アーカイブに保存されているメタデータを返します。メタデータは、アーカイブ作成時に Phar::setMetadata() を使って追加されたもので、様々な型のデータ(文字列、数値、配列、オブジェクトなど)を保持できます。

サンプルコード

PHP Phar::getMetadataでメタデータを取得する

1<?php
2
3// このサンプルコードは、Pharアーカイブの作成とメタデータの取得方法を示します。
4// Pharアーカイブを作成・変更するには、php.iniの 'phar.readonly' を 'Off' に設定するか、
5// 以下のようにスクリプト内で一時的に '0' (false) に設定する必要があります。
6// 本番環境ではセキュリティのため 'On' (true) に設定されていることが多いです。
7ini_set('phar.readonly', 0);
8
9$pharFileName = 'my_application.phar'; // 作成するPharアーカイブのファイル名
10
11try {
12    // 1. 新しいPharアーカイブを作成します。
13    // 第1引数: アーカイブのパス
14    // 第2引数: ファイルの有無に関わらず常に新規作成 (Phar::CREATE)
15    //         または、ファイルが存在すれば開く (Phar::OPEN) などのフラグを設定できます。
16    //         ここでは既存ファイルがあっても上書きする動作を想定し0とします。
17    // 第3引数: アーカイブの内部的なエイリアス名 (通常はファイル名と同じ)
18    $phar = new Phar($pharFileName, 0, $pharFileName);
19
20    // 2. Pharアーカイブにファイルを追加します。
21    // これらはアーカイブに含まれるダミーのファイルです。
22    $phar->addFromString('index.php', '<?php echo "Hello from my application!";');
23    $phar->addFromString('config/settings.ini', '[database]\nhost=localhost');
24
25    // 3. Pharアーカイブ全体のメタデータを設定します。
26    // メタデータは、アーカイブに関する情報(例:バージョン、作者、説明など)を
27    // 保存するために使用されます。PHPの配列、オブジェクト、文字列など、
28    // シリアライズ可能な任意のデータ型を保存できます。
29    $applicationMetadata = [
30        'name' => 'My Sample Application',
31        'version' => '1.0.0',
32        'author' => 'PHP Expert',
33        'release_date' => date('Y-m-d H:i:s'),
34        'dependencies' => ['php' => '>=8.0']
35    ];
36    $phar->setMetadata($applicationMetadata);
37
38    echo "Pharアーカイブ '{$pharFileName}' を作成し、メタデータを設定しました。\n";
39
40    // 4. 設定したメタデータを Phar::getMetadata() メソッドで取得します。
41    // このメソッドは引数を取りません。
42    // メタデータが設定されていない場合は null を返します。
43    $retrievedMetadata = $phar->getMetadata();
44
45    if ($retrievedMetadata !== null) {
46        echo "\n--- Phar::getMetadata() で取得したメタデータ ---\n";
47        // 取得したメタデータを var_dump で表示します。
48        // var_dumpは、データ型や値の詳細を表示するため、初心者がデータの構造を理解するのに役立ちます。
49        var_dump($retrievedMetadata);
50        echo "------------------------------------------------\n";
51    } else {
52        echo "\nPharアーカイブにメタデータが設定されていませんでした。\n";
53    }
54
55    // アーカイブを読み取り専用に設定して、誤って変更されるのを防ぐこともできます。
56    // $phar->stopBuffering();
57
58} catch (PharException $e) {
59    // Phar操作中にエラーが発生した場合、例外をキャッチしてメッセージを表示します。
60    echo "Phar操作中にエラーが発生しました: " . $e->getMessage() . "\n";
61} finally {
62    // 5. クリーンアップ: サンプルコードが生成したPharファイルを削除します。
63    // これにより、実行後に不要なファイルが残るのを防ぎます。
64    if (file_exists($pharFileName)) {
65        unlink($pharFileName);
66        echo "\nPharアーカイブ '{$pharFileName}' を削除しました。\n";
67    }
68}
69
70// 注意: ini_setで変更した設定は、スクリプトの実行が終了すると元の値に戻ります。
71// そのため、明示的に ini_restore('phar.readonly'); を呼び出す必要はありません。
72?>

Phar::getMetadata() メソッドは、PHPのPharアーカイブに保存されたメタデータ(追加情報)を取得するために使用されます。

メタデータとは、Pharアーカイブ全体のバージョン、作者、説明、依存関係といった、ファイルの内容とは異なる補足的な情報を指します。この情報は、通常 Phar::setMetadata() メソッドで事前にアーカイブに設定されます。

本メソッドは引数を一切取りません。戻り値は mixed 型で、Phar::setMetadata() で設定された配列、オブジェクト、文字列など、任意のシリアライズ可能なデータ型を返します。もしアーカイブにメタデータが設定されていない場合は、null を返します。

サンプルコードでは、まず phar.readonly 設定を一時的に変更し、Pharファイルの作成・変更を許可しています。次に、'my_application.phar' という新しいアーカイブを作成し、ダミーのファイルを加え、アプリケーション名やバージョン、作者を含むメタデータを Phar::setMetadata() で設定しています。

その後、Phar::getMetadata() を呼び出すことで、先ほど設定したメタデータを正確に取得し、var_dump 関数でその詳細な内容を表示しています。これにより、Pharアーカイブに付随する情報を実行時に容易に管理・取得できることが示されています。処理の最後には、生成されたPharファイルをクリーンアップとして削除しています。

このサンプルコードはPharアーカイブの作成とメタデータ取得の基本を示しています。Pharアーカイブを作成・変更する際には、セキュリティのため通常有効なphar.readonly設定を、ini_setなどで一時的に無効にする必要がありますが、本番環境ではセキュリティリスクを考慮し慎重に扱ってください。Phar::getMetadata()メソッドは、引数なしでアーカイブに保存されたメタデータを取得し、設定されていなければnullを返しますので、取得後のnullチェックが重要です。Phar操作はPharExceptionを発生させる可能性があるため、try-catchブロックでエラーを適切に処理してください。ini_setによる設定変更はスクリプト終了時に元に戻るため、明示的な復元は不要です。

関連コンテンツ