1. 導入
PHPで開発したツールやアプリケーションをクライアントや他のサーバー環境へ配布する際、ファイルが数百、数千と分散していると、アップロードの手間やディレクトリ構造の不整合によるトラブルが発生しがちです。また、ライブラリの依存関係を含めた配布は管理が煩雑になります。これらの課題を解決し、アプリケーションを「単一の実行可能ファイル」としてまとめる技術が「PHAR (PHP Archive)」です。JavaにおけるJARファイルのように、PHPでも配布と実行を容易にする重要な技術です。
2. 基礎知識
PHARとは、PHPのアーカイブ形式であり、複数のPHPファイル、設定ファイル、画像、CSSなどを1つのファイルにパッケージングする仕組みです。
最大の特徴は、PHP実行環境さえあれば、アーカイブ内のコードをそのまま実行できる点です。Webサーバー上の配布だけでなく、コマンドラインツール(CLI)としての配布にも非常に適しています。
3. 実装/解決策
PHARを作成するには、php.iniで「phar.readonly」設定が「Off」になっている必要があります。開発環境で作成し、実行環境にデプロイする流れが一般的です。
作成の基本手順は以下の通りです。
1. Pharオブジェクトを作成する。
2. ディレクトリ全体または特定のファイルをアーカイブに追加する。
3. エントリポイント(実行時に最初に読み込まれるファイル)を指定する。
4. スタブ(Pharファイルが実行された際に最初に動くコード)を設定する。
4. サンプルプログラム
以下は、特定のディレクトリをPHARファイルにパッケージングするビルド用スクリプトの例です。
buildFromDirectory(dirname(__FILE__) . ‘/src’);
// エントリポイントの設定: PHAR実行時に最初に呼ばれるファイル
$defaultStub = $phar->createDefaultStub(‘index.php’);
// スタブの設定(CLIで実行するためのシバンを追加)
$stub = “#!/usr/bin/env php\n” . $defaultStub;
$phar->setStub($stub);
echo “PHARファイルの作成が完了しました: ” . $pharFile . PHP_EOL;
?>
実行コマンド: php build.php
作成されたPHARの実行: php myapp.phar
5. 応用・注意点
■ 運用上の注意点
・セキュリティ: PHARファイルは署名(SHA-1, SHA-256など)を付与して改ざんを検知することが可能です。本番環境で配布する場合は、必ず署名を行うことを推奨します。
・パスの扱い: PHAR内部のファイルパスは「phar://」から始まる特殊なパスになります。__FILE__定数や相対パスの解決には注意が必要で、なるべくPhar::running()メソッドを活用してパスを動的に取得するようにしましょう。
・書き込み制限: PHARファイル自体は「読み取り専用」として扱うのが基本です。設定ファイルなどはPHAR外のディレクトリに保存する設計にしてください。
PHARを活用することで、配布のハードルが劇的に下がります。CLIツールを自作して運用している方は、ぜひ導入を検討してみてください。