導入
PHP開発において、複数のファイルで構成されるライブラリやツールを配布・管理するのは意外と手間がかかるものです。特に、配布先で依存関係の解決に悩まされたくない場合、単一のファイルで完結する仕組みが求められます。そこで役立つのが「Phar(PHP Archive)」です。今回は、PHPのアプリケーションやライブラリを一つのアーカイブファイルとしてパッケージングし、配布・実行する方法を解説します。
基礎知識
Pharとは、JavaのJARファイルに近い概念で、PHPのアプリケーション全体を一つのファイルにまとめるための拡張機能です。これを利用することで、複数のPHPスクリプト、画像、設定ファイルなどを一つの「.phar」ファイルに圧縮・結合し、PHPの実行環境さえあればどこでも単一ファイルとして実行できるようになります。大規模なプロジェクトのデプロイや、配布用ツールを作成する際に非常に強力なツールとなります。
実装/解決策
Pharを作成するには、PHPの組み込みクラスである「Phar」を使用します。手順は以下の通りです。
1. php.iniの設定確認: `phar.readonly` 設定が `Off` になっていることを確認します(デフォルトではセキュリティ上 `On` になっている場合が多いです)。
2. アーカイブの作成: `Phar` クラスを使用して、ディレクトリ内のファイルを再帰的に読み込み、一つのファイルに書き出します。
3. スタブ(Stub)の定義: アーカイブ実行時に最初に呼び出されるファイル(エントリーポイント)を指定します。
サンプルプログラム
以下のスクリプトは、指定したディレクトリ内のファイルを「app.phar」というファイルにまとめるためのビルドスクリプト例です。
buildFromDirectory(dirname(__FILE__) . ‘/src’);
// スタブ(実行時のエントリーポイント)の設定
// このファイルが実行されると、src/index.php が呼び出される
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “Pharファイルの生成が完了しました。” . PHP_EOL;
?>
実行方法: `php build.php` を実行すると「app.phar」が生成されます。その後、`php app.phar` で実行可能です。
応用・注意点
現場で活用する際の注意点は以下の3点です。
1. 読み取り専用設定: 配布先環境で `phar.readonly = On` になっている場合、Pharファイル内部の書き換えはできません。配布用として使用する分には問題ありませんが、キャッシュやログをPhar内部に書き込もうとするとエラーになります。書き込みが必要なデータは、必ず外部のディレクトリを指定してください。
2. セキュリティ: Pharファイルは署名(OpenSSLなど)を付与して改ざんを検知することも可能です。配布する際は署名を活用することを推奨します。
3. パスの指定: Phar内部のファイルへアクセスする際は、`__DIR__` ではなく `Phar::running()` を使用してパスを解決するのが定石です。これにより、Pharとして実行されているのか、通常のファイルとして実行されているのかを区別して正しくパスを解決できます。
これらのTipsを活用し、配布しやすく堅牢なPHPツール開発に役立ててください。