1. 導入
PHPアプリケーションを開発し、複数のサーバーやクライアントに配布する際、ファイル数が膨大になり管理が煩雑になることはありませんか?「PHP Archive(Phar)」は、複数のPHPファイルを一つのアーカイブファイルにまとめ、単一の実行可能ファイルとして配布できる仕組みです。JavaのJARファイルに近い概念であり、ライブラリの配布やポータブルなCLIツールの作成において、デプロイの複雑さを解消する非常に強力な武器となります。
2. 基礎知識
Phar(PHP Archive)とは、PHP 5.3以降で導入されたアーカイブ形式です。最大の特徴は、PHPインタープリタがアーカイブ内のファイルを直接読み込んで実行できる点です。Webサーバー環境だけでなく、コマンドラインツールとしても配布しやすいため、 composerの依存関係をすべて含めて配布する際などにも利用されています。利用にあたっては、php.iniで「phar.readonly」の設定が「Off」になっている必要があります。
3. 実装/解決策
Pharを作成するには、Pharクラスを使用します。ディレクトリ構造をそのまま一つのファイルにパッケージ化し、エントリーポイント(実行時に最初に読み込まれるファイル)を指定するだけで作成可能です。以下に、指定したディレクトリを単一のpharファイルに圧縮するスクリプトを示します。
4. サンプルプログラム
buildFromDirectory($sourceDir);
// エントリーポイントの設定(pharを実行した時に呼び出されるファイル)
$defaultStub = $phar->createDefaultStub(‘index.php’);
// スタブ(起動用コード)をセット
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “Pharファイルの作成が完了しました: ” . $pharName . PHP_EOL;
// 実行確認用: php myapp.phar と打つとindex.phpが実行されます
?>
5. 応用・注意点
Pharを利用する上で注意すべき点がいくつかあります。
・phar.readonly設定: 多くの本番環境ではセキュリティの観点から「phar.readonly = On」がデフォルトです。この場合、実行時にPharファイルの中身を動的に書き換えることはできません。配布用として作成する場合、この設定の影響を受けないよう注意してください。
・パスの扱い: Phar内部のファイルを読み込む際、__DIR__などはPhar内のパスを指すようになります。外部の設定ファイルや画像などのリソースを読み込む際は、Pharの内部パスと外部の絶対パスの混同に注意してください。
・キャッシュの利用: 大規模なアプリケーションを配布する場合、Phar内のファイルはキャッシュされることがあります。開発中に内容を変更した場合はキャッシュをクリアするか、Pharのメタデータを適切に更新する運用フローを組み込むことを推奨します。
これらの点を押さえることで、配布時のファイル転送ミスを減らし、よりクリーンなデプロイ環境を構築することが可能になります。ぜひ自身のツール開発に取り入れてみてください。