導入
PHPで開発されたアプリケーションを配布する際、大量のファイル管理に頭を悩ませたことはありませんか?「PHP Archive(PHAR)」は、複数のPHPファイルを1つのアーカイブファイルにまとめ、実行可能な形式として配布できる強力な仕組みです。JavaのJARファイルに近い役割を果たし、依存関係の管理や配布の手間を大幅に軽減できるため、ツール開発やライブラリ配布において非常に重要な技術です。
基礎知識
PHARとは、PHP 5.3以降で標準搭載されたアーカイブ形式です。最大の特徴は、PHPエンジンがアーカイブ内のファイルを直接読み込んで実行できる点です。Webサーバーの設定を変更することなく、特定のディレクトリにファイルを配置するだけでアプリケーションを稼働させることが可能です。また、Pharクラスを使用することで、アーカイブの作成、展開、署名(セキュリティ対策)といった操作をプログラムから制御できます。
実装/解決策
PHARを作成するには、まずphp.iniで「phar.readonly」設定が「Off」になっている必要があります。開発環境で作成を行う際は、一時的に設定を変更してください。作成手順はシンプルで、PharDataオブジェクトまたはPharオブジェクトを生成し、buildFromDirectoryメソッド等を使ってディレクトリを丸ごとアーカイブ化するだけです。
サンプルプログラム
以下のコードは、指定したディレクトリ内のファイルを「app.phar」というファイルに圧縮するスクリプトです。
buildFromDirectory(__DIR__ . ‘/src’);
// エントリポイント(アーカイブ実行時に最初に呼び出されるファイル)の設定
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “PHARファイルの作成が完了しました: ” . $pharFile;
?>
応用・注意点
現場でPHARを利用する際は、以下の点に注意してください。
1. セキュリティ署名: PHARは改ざん検知のためにSHA-1やSHA-256などの署名を追加できます。配布用には必ず署名を行う運用を推奨します。
2. 実行環境の依存: PHAR内のコードから外部ファイルを読み込む場合、パス指定が複雑になりがちです。「Phar::mapPhar()」を利用することで、アーカイブ内の相対パスを正しく解決できるようになります。
3. キャッシュの罠: PHPにはPHARファイルのキャッシュ機能があります。開発中にコードを修正しても反映されない場合は、php.iniの「phar.cache_list」やキャッシュのクリアを疑ってください。
これらを適切に活用することで、クリーンかつ配布しやすいPHPアプリケーションの開発が可能になります。