Pharアーカイブの中のソースコードを修正する

とある事情で古い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アーカイブファイル内のソースコードを変更する手順

  1. 適当な場所に元のpharアーカイブファイルを配置する。
  2. stub情報を保存する。
  3. phar extract コマンドでソースコードを展開する。
  4. 目的の修正を行なう。
  5. phar pack コマンドで固める。
  6. 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アーカイブファイルとなります。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください