【PHP実践|実務向け】PHPでの「単一実行ファイル配布」を実現するPHAR(PHP Archive)の活用術

導入

PHPで開発したアプリケーションを配布する際、大量のソースファイルをそのまま納品・設置するのは管理が煩雑になりがちです。特にライブラリやコマンドラインツールを配布する場合、複数のファイルを一つの実行可能ファイルにまとめたいというニーズが発生します。そんな課題を解決してくれるのが、PHPの標準機能である「PHAR(PHP Archive)」です。

基礎知識

PHARとは、JavaのJARファイルのような仕組みで、複数のPHPファイルや関連リソースを1つのアーカイブファイルにまとめるための技術です。PHP 5.3.0以降で標準搭載されており、これを使うことで、アプリケーションを単一のファイルとして配布し、実行することができます。また、PHARファイルはPHPエンジンによって直接実行可能な形式にできるため、デプロイや配布が極めて容易になります。

実装/解決策

PHARを作成するには、PHPの`Phar`クラスを使用します。作業手順は以下の通りです。

1. php.iniで `phar.readonly` を `Off` に設定します(作成時のみ必要)。
2. `Phar` インスタンスを作成し、アーカイブ対象のディレクトリやファイルを追加します。
3. `setStub` メソッドを使用して、ファイル実行時に呼び出されるエントリーポイント(メイン処理)を設定します。

サンプルプログラム

以下は、特定のディレクトリ内のファイルを一つの「app.phar」にまとめるスクリプト例です。

buildFromDirectory(dirname(__FILE__) . ‘/src’);

// エントリーポイントの設定(実行時に呼び出されるファイル)
$defaultStub = $phar->createDefaultStub(‘index.php’);

// スタブ(起動スクリプト)の設定
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);

echo “PHARファイルを作成しました: ” . $pharFile . PHP_EOL;
?>

このスクリプトを実行すると、`src`ディレクトリ内のコードが`app.phar`に圧縮され、`php app.phar`コマンドで直接起動できるようになります。

応用・注意点

現場でPHARを利用する際の注意点は、書き込み権限です。PHAR自体はアーカイブ形式であるため、内部のファイルを直接書き換える運用には向きません。設定ファイルやログファイルなど、実行中に書き込みが発生するデータは、PHARの外(外部ディレクトリ)に配置し、読み書きする設計にするのが定石です。

また、PHARファイルはセキュリティ上のリスクにもなり得ます。サーバー環境で`phar.readonly`が`On`(デフォルト)になっている場合、PHARの作成はできませんが、配布されたPHARを実行する分には問題ありません。本番環境へのデプロイ前には、必ずPHAR化した状態での動作テストを行い、パスの参照関係が崩れていないか確認するようにしてください。

タイトルとURLをコピーしました