導入
PHPの開発現場において、複数のファイルで構成されたライブラリやアプリケーションを配布する際、ファイル数の多さがネックになることがあります。特に、顧客への納品や社内ツールとしての配布時に、ディレクトリ構造を丸ごとコピーするのは管理が煩雑です。そこで役立つのが「PHP Archive(Phar)」です。Pharは、JavaのJARファイルのように、複数のPHPファイルを1つのアーカイブにまとめ、単一のファイルとして実行可能にする仕組みです。本記事では、Pharの基本から実用的な作成方法までを解説します。
基礎知識
Pharとは、PHPアプリケーションを単一のファイルにパッケージングするためのアーカイブ形式です。
Pharの主なメリットは以下の通りです。
・配布の簡素化:数百のファイルがあっても、1つの.pharファイルのみを配布すれば済みます。
・実行速度:PHP 5.3以降、標準でサポートされており、高速に読み込み・実行が可能です。
・ポータビリティ:依存関係を含むライブラリを固めれば、環境構築の手間を大幅に削減できます。
実装/解決策
Pharを作成するには、php.iniで「phar.readonly」の設定が「Off」になっている必要があります。開発環境で作成し、読み取り専用として配布するのが一般的です。作成の基本フローは「Pharオブジェクトの生成」「ファイルの追加」「スタブ(実行の起点となるコード)の設定」の3段階です。
サンプルプログラム
以下のコードは、指定したディレクトリ内のPHPファイルを一つのPharファイルにまとめるためのビルドスクリプト例です。
buildFromDirectory(dirname(__FILE__) . ‘/src’);
// スタブ(エントリポイント)の設定
// このファイルがPhar実行時に最初に読み込まれます
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “Pharファイルが作成されました: ” . $pharFile;
?>
応用・注意点
現場での運用において特に注意すべき点は以下の3つです。
1. readonly設定の罠:サーバー環境(特に共有サーバーなど)では、セキュリティ上の理由からphar.readonlyがOnになっていることが多く、実行時にPharを生成・編集することはできません。Pharはあくまで「配布用」と割り切り、ビルドはCI環境やローカルで行うのが鉄則です。
2. キャッシュの問題:Pharは内部でキャッシュを行うことがあります。開発中にソースコードを変更した際、変更が反映されない場合は「Phar::mapPhar()」の呼び出し箇所やキャッシュ設定を確認してください。
3. パスの指定:Phar内部から外部のファイル(設定ファイルやログファイル)を参照する場合、相対パスがPharファイル自身を起点としてしまうことがあります。「Phar::running()」メソッドを利用して、現在実行中のPharファイルのパスを適切に取得するように実装してください。
これらを意識することで、PHPアプリケーションの配布や管理がよりスムーズになります。ぜひ次回のプロジェクトで活用してみてください。