導入
PHPアプリケーションを開発する際、複数のファイルを配布したり、ライブラリをひとまとめに管理したりする場面に遭遇することがあります。JavaにおけるJARファイルのように、PHPには複数のファイルを1つのアーカイブとしてまとめる仕組み、それがPHAR (PHP Archive)です。PHARを活用することで、配布の手間を省き、実行環境へのデプロイを簡潔にするという大きなメリットがあります。
基礎知識
PHARは、PHPのスクリプト、設定ファイル、画像、CSSなどのリソースを単一のファイルにパッケージングする機能です。PHP 5.3以降で標準サポートされており、拡張子「.phar」を持つファイルとして扱われます。
仕組みとしては、アーカイブ内のコードを直接実行することも、ライブラリとして読み込むことも可能です。特にComposerが内部的にPHARを利用していることからも分かる通り、現代のPHP開発において「配布」や「依存解決」を最適化するための重要な技術です。
実装/解決策
PHARを作成するには、php.iniの設定で「phar.readonly」が「Off」になっている必要があります。開発環境で作成し、本番環境で読み込ませるのが一般的な運用フローです。
アーカイブを作成する際は、PHPが提供するPharクラスを使用します。ディレクトリ全体を再帰的に追加し、最後に「スタブ(Stub)」と呼ばれる、アーカイブ実行時に最初に読み込まれるPHPファイルを設定するのがポイントです。
サンプルプログラム
以下のコードは、指定したディレクトリ内のファイルを1つの「app.phar」にまとめる実用的なスクリプトです。
buildFromDirectory(dirname(__FILE__) . ‘/src’);
// スタブ(エントリポイント)の設定
// このファイルがアーカイブ実行時に最初に読み込まれる
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “PHARファイルが作成されました: ” . $pharFile;
?>
応用・注意点
1. セキュリティと設定: PHARファイルは実行可能ですが、Webサーバーから直接アクセス可能な場所に配置する場合、設定を誤るとソースコードが漏洩するリスクがあります。必ずWebルート外に配置するか、NginxやApacheの設定で「.phar」への直接アクセスを制限してください。
2. 署名機能: 配布用のPHARを作成する際は、セキュリティのためにOpenSSLを使用した署名(Phar::setSignatureAlgorithm)を行うことを推奨します。これにより、アーカイブが改ざんされていないことを検証できます。
3. readonly制限: 本番環境ではセキュリティのため、php.iniで「phar.readonly = On」と設定するのが鉄則です。あくまで「実行専用」として運用しましょう。
PHARは、単なる圧縮ファイルではなく、PHPアプリケーションをポータブルなパッケージとして扱うための強力なツールです。CLIツールや配布用ライブラリの開発にぜひ役立ててください。