PHAR ファイル形式とは?
.phar ファイルは PHP 開発環境に関連付けられています。.phar アーカイブは JAR ファイルの PHP 版であり、PHP アプリケーションやライブラリ全体を、単一のファイルとして配布可能な自己完結型の実行可能バンドルにパッケージ化します。
PHAR ファイルにはどのようなデータが含まれますか?
.phar アーカイブには、PHP スクリプトとそれをサポートするアセット(テンプレート、設定、リソース)が格納され、オプションでファイル単位またはアーカイブ全体を gzip または bzip2 で圧縮できます。すべての .phar ファイルには、実行可能な PHP スタブ、メタデータを含むバンドルファイルの一覧を示すバイナリマニフェスト、および phar.require_hash を介して検証されるオプションの暗号署名(MD5、SHA-1、SHA-256、SHA-512、または OpenSSL)が含まれています。
PHAR ファイルを実行するにはどうすればよいですか?
.phar ファイルは、PHP コマンドラインインタープリタを使用して直接実行できます:php app.phar。よく知られた例には composer.phar や phpunit.phar があります。プログラムで Phar を作成または変更するには、php.ini で phar.readonly=0 に設定する必要があります(デフォルトは 1 の読み取り専用です)。
PHAR ファイルに関するセキュリティ上の懸念
PHP 5.3.0 以降、Phar サポートはデフォルトで有効になっています。PHP 環境での自動的な PHAR コード実行は、深刻なシステムセキュリティリスクをもたらします。悪意のある PHP コードが、単純な拡張子の置換によって JPEG や .txt ファイルに偽装された PHAR ファイルとして配布された既知の事例があります。このようなファイルを開くと、システムがマルウェアに感染する可能性があります。さらに、攻撃者が制御するファイルパスで Phar ストリームラッパー(phar://)をトリガーすると、埋め込まれたメタデータがアンシリアライズされ、オブジェクト注入によるリモートコード実行(RCE)につながる恐れがあります。
セキュリティと安全性
リスク: HIGHPHAR は実行可能な PHP コードであるため、他のプログラムと同様に扱ってください。信頼できる公式ソース(getcomposer.org の composer.phar、phpunit.de の phpunit.phar など)からの Phar のみを実行し、提供されている場合は公開されているチェックサム/署名を検証してください。実行以外にも、Phar は悪名高いサーバーサイドの攻撃ベクトルです。アプリケーションが攻撃者の制御するパスをファイル関数に渡すと、phar:// ストリームラッパーが埋め込まれたメタデータをアンシリアライズし、PHP オブジェクト注入やリモートコード実行を可能にする恐れがあります。未承諾の .phar は決して実行せず、サーバー上では phar:// パスを解決できる関数にユーザー入力を渡さないようにしてください。
形式の詳細
概要PHAR ファイルを開くプログラム
技術的詳細
詳細仕様| エントリポイント(スタブ) | バイナリマニフェストの開始を示す `__HALT_COMPILER();` トークンで終わる実行可能な PHP スタブ |
| 末尾の署名マジック | 末尾の署名ブロックにある 4 バイトのマジック「GBMB」(署名付き Phar のみ存在) |
| 圧縮 | なし、Zlib (gzip)、または Bzip2 - ファイル単位またはアーカイブ全体で設定可能 |
| 署名アルゴリズム | MD5, SHA-1, SHA-256, SHA-512, または OpenSSL X.509(php.ini の phar.require_hash で制御) |
| 実行方法 | `php app.phar` で直接実行。抽出は不要 |
| 作成要件 | 実行時に Phar ファイルを作成または変更するには、php.ini で `phar.readonly=0` を設定する必要がある |
| 内部レイアウト | PHP スタブ + バイナリマニフェスト(ファイルリスト、API バージョン、フラグ) + ファイルデータ + オプションの署名ブロック |
| バイト順序 | リトルエンディアン |
| 一般的なサイズ | 数十 KB から数十 MB(例:composer.phar は約 2 MB、phpunit.phar は約 3 MB) |
| PHP バージョンサポート | PHP 5.3(2009年)以降デフォルトでバンドル。PHP 8.x まで維持 |
| セキュリティリスク | 攻撃者が制御するパスでの `phar://` ストリームラッパーを介した Phar デシリアライゼーションにより、オブジェクト注入 RCE が引き起こされる可能性がある |
| サポートされているペイロードレイアウト | フラット Phar、tar ベースの Phar、または zip ベースの Phar(PHP がマニフェストから形式を選択) |
| リリース日 | 2008 (Phar extension bundled in PHP 5.3) |
| 最新バージョン | Maintained as a core PHP extension (current through PHP 8.x) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | www.php.net |
PHAR の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。PHAR ファイルについて最初の質問をしてみましょう。
よくある質問
PHAR ファイルを実行するにはどうすればよいですか?
php tool.phar を実行します。Linux/macOS では、シバン(shebang)が含まれていれば chmod +x tool.phar && ./tool.phar とすることも可能です。通常、ダブルクリックでは動作しません。PHAR ファイルとは何ですか?
中身を確認するために PHAR を開くにはどうすればよいですか?
PHAR ファイルを実行しても安全ですか?
なぜ PHAR が実行できず「phar.readonly」エラーが出るのですか?
php.ini で phar.readonly=0 の設定が必要です。実行するだけであれば、その設定は不要です。PHAR を EXE に変換できますか?
php tool.phar を実行するか、どうしても単体で動作する .exe が必要な場合は、専用のパッカーを使用して PHP を Phar と一緒にバンドルしてください。