1. 導入:なぜPharを活用するのか
PHP開発において、複数のファイルで構成されたアプリケーションを配布する際、ファイル管理やデプロイの手間に悩まされたことはありませんか?「Phar (PHP Archive)」は、複数のPHPファイルを一つのアーカイブファイルにまとめ、JavaのJARファイルのように実行可能にする仕組みです。本記事では、ライブラリの配布やデプロイを劇的に効率化するPharの基本と実装方法を解説します。
2. 基礎知識:Pharとは何か
Pharは「PHP Archive」の略で、PHP 5.3.0からコアに組み込まれた拡張機能です。最大の特徴は、ディレクトリ構造を保持したまま一つのファイル(.phar)に圧縮できる点です。WebサーバーやCLIから直接読み込むことができ、PHP環境さえあれば、アーカイブ内のファイルを展開することなく実行可能です。ライブラリの配布や、CLIツールの提供において非常に強力なツールとなります。
3. 実装/解決策:Pharファイルの作成手順
Pharファイルを作成するには、php.iniで「phar.readonly」設定が「Off」になっている必要があります。開発環境で以下の設定を確認してください。
[phar.readonly = Off]
作成の論理的な手順は以下の通りです。
1. Pharオブジェクトを生成し、ディレクトリ内のファイルを取り込む。
2. スタブ(Stub)と呼ばれる、実行時のエントリポイントを設定する。
3. 圧縮形式を指定して保存する。
4. サンプルプログラム:ディレクトリをPhar化するスクリプト
以下は、特定のディレクトリを「app.phar」という単一ファイルにまとめるためのビルドスクリプトです。
buildFromDirectory($srcDir);
// スタブ(エントリポイント)の設定
// このファイルが直接実行された時に呼ばれるコードを定義します
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “Pharファイルの作成が完了しました: ” . $pharFile . PHP_EOL;
?>
5. 応用・注意点:現場で陥りやすい罠
Pharを活用する上で、現場で特に注意すべき点がいくつかあります。
・セキュリティ設定:
PharはPHPコードを直接実行するため、悪意のあるPharファイルを実行しないよう注意が必要です。プロダクション環境では、php.iniで「phar.readonly = On」に戻しておくのがセキュリティの鉄則です。
・パスの扱い:
Phar内部のファイルパスは「phar:///path/to/app.phar/file.php」のように記述されます。相対パスでファイルを読み込んでいる場合、意図した通りに動作しないことがあります。「__DIR__」定数などを活用し、パスの解決を確実に行うようにしてください。
・バージョン管理:
参考本文でも触れられた「バージョンの互換性」と同様に、Pharを作成する際のPHPバージョンと、実行する環境のPHPバージョンが極端に離れているとエラーが発生します。ターゲットとする実行環境のPHPバージョンに合わせてビルドするようにしましょう。
適切に使えば、Pharは配布のストレスを大幅に軽減してくれます。ぜひ次回のツール開発で導入を検討してみてください。