先日PHP8.0.0α1でJITを試したときはPHP8をXAMPP経由で起動することができなかったのですが、今回動かすことができたので、その方法の共有です。
今回試したのはPHP8.0.0β2です。
XAMPPインストール
まずローカルのXAMPPを削除。
公式サイトからWindows向けXAMPPの最新版をダウンロードしてインストール。
既にPHP7.4.x版が入っているようなら、そのままでもいけると思います。
PHP8.0.0インストール
Windows版ダウンロードページからVS16 x64 Thread Safe
をダウンロード。
適当に解凍。
path\to\xampp\php
ディレクトリにだばぁ!と上書き。
php.ini-development
を既存のphp.ini
に上書き。
extension=mbstring
とかdate.timezone
とかを好きに設定する。
Apacheの設定
path\to\xampp\apache\conf\extra\httpd-xampp.conf
をエディタで開く。
php7ts.dll
をphp8ts.dll
に置換。
php7apache2_4.dll
をphp8apache2_4.dll
に置換。
php7_module
をphp_module
に置換。
起動
XAMPPコントロールパネルから起動。
http://localhost
にアクセス。
これでPHP8.0.0が動いているはず。
注意点
httpd-xampp.conf
のphp_module
がポイントです。
ここを過去の類推からphp8_module
にすると何故か動きません。
これUPGRADINGにしっかり書かれているので、きちんと調べればわかります。
では何故α1でJITを試した時には気付かなかったのかというと、PHP8.0.0α1のUPGRADINGには全く書かれてなかったからなんじゃ!
PHP8.0.0α2のUPGRADINGからしれっと追加されています。
ちなみに、この設定はApacheからPHPを呼び出すときの設定なので、Apacheを使わず直接コマンドラインからPHPを呼び出すのであれば不要です。
先日のJIT実験は、そうやって直接PHPを呼び出したということです。
Apache経由のJITが死ぬ
ということで今度はApache経由でのJITを試してみようと思ったわけですが、なんか動きませんでした。
opcache.jit_buffer_size
が設定されていると、何故かApache経由でアクセスするとERR_CONNECTION_RESETになって死にます。
これもコマンドライン経由だときちんと動くので、おそらくこれもhttpd-xampp.conf
あたりの問題だと思うのですがよくわかりませんでした。
XAMPPかApacheかどこかがサンプル設定上げてくれるとありがたいんですけどね。
PHP CS Fixerが死ぬ
PHPのデフォルトをPHP8にするとPHP CS Fixerがエラーを吐くようになります。
VSCodeだとPHP CS Fixer: php general error.
としか言わないから何が原因なのかわからねえ。
直接実行すればメッセージを確認できます。
$ "path\to\php\php.exe" "path\to\php-cs-fixer-v2.phar"
PHP needs to be a minimum version of PHP 5.6.0 and maximum version of PHP 7.4.*.
ええ…
現行最新のv2.16.4を使ってもこう言われます。
RCが出たらまた来てだそうです。ひどい。
バージョン見て門前払いじゃなくて、せめて動かせるけど保証はしない、ってなりませんかね。
VSCodeのPHPフォーマッターはたくさんありますが、その多くはPHP CS Fixerのラッパーです。
従ってPHP CS Fixerが対応しないことにはまともに開発できないため、まだまだ環境を切り替えるには早いですね。
自力で整形しているフォーマッターのプラグインがあるのかはよくわかりませんでした。
どうしても早く使いたいなら、自力で対応しているPHPstormなどを使ってみるといいかもしれません。