PHP8でSegmentation Failtが発生した時の原因と対処法

PHP8でSculpinの静的サイトジェネラーターを使っていると、Segmentaion Failtが発生した。

試しに適当なスクリプトを作って<?php echo "こんにちは世界"; >とすると上手く動作する。

原因と解決策を調べてみた。

原因はXdebugとJITの干渉。

原因はXdebugとJITの干渉だった。JITはPHP8から導入されたが、Xdebugの競合しているようだ。

  • https://tech.griphone.co.jp/2021/12/13/php8-update/
  • https://tech.fusic.co.jp/posts/2020-12-14-php8_xdebug_webgrind/

解決策

とりあえずの解決策としてXdebugのOFFにするのが手っ取り早い。 Xdebugが必要な際は、JITの方をOFFにするのがよいだろう。

まずは、php.iniの場所を調べる。

php --ini | grep "Loaded Configuration File"
Loaded Configuration File:         /home/user.phpenv/versions/8.3.21/etc/php.ini
code /home/user.phpenv/versions/8.3.21/etc/php.ini

そして、php.iniの末尾に以下を追加して保存する。

; Xdebug 全機能を無効化
xdebug.mode=off

これで正常に動くことができた。