導入
開発したPHPアプリケーションやライブラリを配布する際、数多くのファイル群をそのままアップロードするのは管理が煩雑になりがちです。また、ライブラリの依存関係やディレクトリ構成を維持したまま移動させるのは、運用上のリスクにもなります。そこで活用したいのが「PHAR(PHP Archive)」です。これはJavaのJARファイルに近い概念で、複数のPHPファイルを1つのアーカイブにまとめ、単一のファイルとして実行・配布可能にする技術です。本記事では、PHARの基礎から実務での実装方法までを解説します。
基礎知識
PHARは「PHP Archive」の略称で、PHP 5.3.0以降でコア機能として提供されています。PHARファイルは、その中に含まれるPHPスクリプトを、あたかも通常のファイルシステム上にあるかのように実行できます。
主なメリットは、配布が容易であること、ファイルの改ざん検知(署名)が可能であること、そして単一ファイルでプログラムを配布できるため、環境構築やデプロイの手間が省ける点です。
実装/解決策
PHARを作成するには、PHPの設定(php.ini)で「phar.readonly」が「Off」になっている必要があります。開発環境で作成する際は、まずこの設定を確認してください。
実装手順は以下の通りです。
1. Pharクラスを使用してアーカイブオブジェクトを作成する。
2. buildFromDirectoryメソッドで、対象のディレクトリ内のファイルを再帰的に読み込む。
3. setStubメソッドで、アーカイブ実行時のエントリーポイント(最初に読み込まれるファイル)を指定する。
サンプルプログラム
以下のコードは、指定したプロジェクトディレクトリを「app.phar」という単一ファイルに圧縮するスクリプトです。
buildFromDirectory($srcDir);
// エントリーポイント(このPHARが実行された時に動くコード)を指定
// index.phpを呼び出すスタブを作成
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “PHARファイルの作成が完了しました: ” . $pharFile . PHP_EOL;
?>
応用・注意点
現場での利用にあたっては、以下の点に注意してください。
1. 実行権限の付与
作成したPHARファイルをコマンドラインから直接実行可能にするには、chmod +x app.phar を実行し、スタブの先頭にシバン(#!/usr/bin/env php)を含めることが推奨されます。
2. パスの取り扱い
PHAR内部のファイルにアクセスする場合、通常の相対パスではなく「phar://」スキームを使用する必要があります。ファイル読み込み時に「phar://app.phar/config.json」のように指定することで、アーカイブ内のリソースに安全にアクセスできます。
3. セキュリティ
PHARは署名機能(OpenSSLなど)をサポートしています。配布する際には、改ざん防止のために必ず署名を行い、利用者が検証できるようにしましょう。単なるコードの配布物としてだけでなく、CLIツールや配布用ライブラリとして非常に強力なツールとなります。