導入
PHPには、複数のファイルを1つのアーカイブファイルにまとめ、そのまま実行可能にする「Phar (PHP Archive)」という仕組みが存在します。JavaのJARファイルに近い概念です。本記事では、ライブラリの配布やアプリケーションのポータビリティ向上に役立つPharの基本と、実務で活用するための実装方法を解説します。
基礎知識
Pharは「PHP Archive」の略称です。PHPのソースコード、設定ファイル、画像などのリソースを単一のファイル(.phar)にパッケージ化できます。これを利用することで、複雑なディレクトリ構成を配布する必要がなくなり、実行環境にファイルを1つ置くだけでアプリケーションが動作するようになります。また、PharはPHPの拡張機能として提供されており、セキュリティ設定(phar.readonly)を確認するだけで利用可能です。
実装/解決策
Pharを作成するには、まずphp.iniで「phar.readonly」が「Off」になっていることを確認してください。次に、Pharクラスを使用してアーカイブを作成します。スタブ(Stub)と呼ばれるPHPコードを先頭に含めることで、実行時にどのファイルがエントリポイントになるかを指定できます。
サンプルプログラム
以下のコードは、指定したディレクトリ内のファイルを1つのPharアーカイブにまとめるスクリプトです。
buildFromDirectory(dirname(__FILE__) . ‘/src’);
// エントリポイントとなるスタブ(実行時に読み込まれるコード)を設定
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “Pharファイルの作成が完了しました: ” . $pharFile . PHP_EOL;
/
- 実行方法:
- 1. php -d phar.readonly=0 build.php を実行して作成
- 2. php myapp.phar を実行して動作確認
/
?>
応用・注意点
現場でPharを利用する際の注意点は、読み取り専用設定です。本番環境ではセキュリティのため「phar.readonly = On」に設定されていることが多いため、実行時は問題ありませんが、作成(ビルド)時は「Off」にする必要があります。また、Phar内部のファイルパスは外部から直接参照できないため、ファイル操作を行う際は「Phar::mapPhar()」を適切に使用するか、相対パスの扱いに注意してください。大規模なアプリケーションでは、Composerの「Box」といったツールを使用することで、依存関係の解決も含めたより高度なビルドが可能になります。