Pharアーカイブの中のソースコードを修正する
2023/07/06
2023/07/15
とある事情で古いPHPUnitをpharファイル経由で使っているのですが、バグがあってそれを直す方法もわかってるんだけど、pharアーカイブの中のソースコードを修正する方法がわからず試行錯誤したので、メモしておきます。
Pharとは
phar 拡張モジュールは、PHP アプリケーション全体をひとつの “phar” (PHP Archive) ファイルにまとめてしまい、配布やインストールを容易にするためのものです。 https://www.php.net/manual/ja/book.phar.php
phar
コマンドで、展開したり纏めたりすることはできるのですが、実行可能なpharアーカイブファイルの情報は展開した情報には含まれないため、extract
で展開して pack
で纏めた場合、実行可能ではないpharアーカイブファイルになってしまうようです。
pharアーカイブファイルに付与されている情報
実行可能なpharファイルの実行スクリプトの情報は、stub
という形でpharファイルに埋め込まれているようです。stub
に加えて meta
という埋め込み情報もあるようです。
Pharアーカイブファイル内のソースコードを変更する手順
- 適当な場所に元のpharアーカイブファイルを配置する。
stub
情報を保存する。- phar extract コマンドでソースコードを展開する。
- 目的の修正を行なう。
- phar pack コマンドで固める。
stub
情報を付与する。
$ cp original.phar /somewhere/
$ cd /somewhere
$ touch stub.php
$ phar stub-get -f original.phar -s stub.php
$ mkdir src
$ cd src
$ phar extract -f ../original.phar
# ここで目的の修正を行ないます。
$ phar pack -f ../new.phar
$ cd ..
$ phar stub-set -f new.phar -s stub.php
上記の手順で作成した new.phar は、目的のソースコード修正が施された実行可能なpharアーカイブファイルとなります。