🎻

Symfony Local Web Serverが急に起動できなくなってたけどすぐ解決した話

に公開

起こったこと

なんか、ある日ふと気付いたら Symfony Local Web Server が起動できなくなってました🙄

$ syfmony serve

すると

$ symfony serve

 [WARNING] run "symfony server:ca:install" first if you want to run the web server with TLS support, or use "--no-tls"
  to avoid this warning


Tailing Web Server/PHP log file
[Web Server/PHP ] Jul 14 01:12:41 |INFO | PHP    listening path="/usr/local/Cellar/php/7.4.2/sbin/php-fpm" php="7.4.2" port=63649
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP    started
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP    dyld: Library not loaded: /usr/local/opt/libffi/lib/libffi.6.dylib
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP      Referenced from: /usr/local/Cellar/php/7.4.2/sbin/php-fpm
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP      Reason: image not found

 [OK] Web server listening
      The Web server is using PHP FPM 7.4.2
      http://127.0.0.1:8000


Shut down, bye!

  PHP server exited unexpectedly: signal: abort trap

こんな感じのエラーが出て死にます。

直し方

エラーメッセージをちゃんと見ればすぐ分かりますが、

  • Homebrewで入れたPHPを起動しようとしていて
  • libffi が見つからなくてエラーになってる

ようです。

僕はローカルのPHP環境は phpenvで構築している ので、Homebrewで入れたPHPが起動されるのは想定している挙動ではありませんでした。

とりあえず symfony local:php:list で状況を確認してみます。

$ symfony local:php:list
┌─────────┬───────────────────────────────────────┬─────────┬───────────────────────────────┬──────────────────────────────┬─────────┬─────────┐
 Version               Directory PHP CLI            PHP FPM           PHP CGI Server System?
├─────────┼───────────────────────────────────────┼─────────┼───────────────────────────────┼──────────────────────────────┼─────────┼─────────┤
 7.1.33 /Users/xxxxxx/.phpenv/versions/7.1.33 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.3.11 /usr bin/php sbin/php-fpm PHP FPM
 7.3.17 /Users/xxxxxx/.phpenv/versions/7.3.17 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.4.2 /usr/local bin/php Cellar/php/7.4.2/sbin/php-fpm Cellar/php/7.4.2/bin/php-cgi PHP FPM *
 7.4.2 /Users/xxxxxx/.phpenv/versions/7.4.2 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.4.5 /Users/xxxxxx/.phpenv/versions/7.4.5 bin/php sbin/php-fpm bin/php-cgi PHP FPM
└─────────┴───────────────────────────────────────┴─────────┴───────────────────────────────┴──────────────────────────────┴─────────┴─────────┘

結果はこんな感じでした。思ったとおり、Homebrewで入れたPHPが起動されているようです。

出ていたエラーメッセージが

dyld: Library not loaded: /usr/local/opt/libffi/lib/libffi.6.dylib

だったので

$ brew update && brew reinstall libffi

とかしても直るかもしれませんが、そもそもHomebrewのPHPが入っていること自体想定外なので、消してしまうことにしました。

たぶん、後から brew uninstall composer && brew install composer とかをして、依存としてインストールされたのだと思います。

$ brew uninstall php --ignore-dependencies

これで、再度 symfony local:php:list してみると、

$ symfony local:php:list
┌─────────┬───────────────────────────────────────┬─────────┬───────────────┬───────────────┬─────────┬─────────┐
 Version               Directory PHP CLI    PHP FPM    PHP CGI Server System?
├─────────┼───────────────────────────────────────┼─────────┼───────────────┼───────────────┼─────────┼─────────┤
 7.1.33 /Users/xxxxxx/.phpenv/versions/7.1.33 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.3.11 /usr bin/php sbin/php-fpm PHP FPM *
 7.3.17 /Users/xxxxxx/.phpenv/versions/7.3.17 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.4.2 /Users/xxxxxx/.phpenv/versions/7.4.2 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.4.5 /Users/xxxxxx/.phpenv/versions/7.4.5 bin/php sbin/php-fpm bin/php-cgi PHP FPM
└─────────┴───────────────────────────────────────┴─────────┴───────────────┴───────────────┴─────────┴─────────┘

The current PHP version is selected from default version in $PATH

To control the version used in a directory, create a .php-version file that contains the version number (e.g. 7.2 or 7.2.15).
If you're using SymfonyCloud, the version can also be specified in the .symfony.cloud.yaml file.

HomebrewのPHPは消えています。が、なぜか /usr/bin/php が採用されています🤔

↑のメッセージに The current PHP version is selected from default version in $PATH とありますが、

php -v すると

$ php -v
PHP 7.4.5 (cli) (built: Jul 14 2020 10:25:09) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
    with Xdebug v2.9.5, Copyright (c) 2002-2020, by Derick Rethans

パスは 7.4.5 に通っています。にもかかわらずなぜかsymfonyコマンドは /usr/bin/php を見ています。これについては原因不明なので詳しい人いたらぜひ 教えてください 😓

とりあえず今回は .php-version 設定ファイルを設置して対処しました。

$ echo 7.4.5 > .php-version

これをプロジェクトルートに置いておけば、明示的に symfony コマンドに使いたいPHPのバージョンを指定できます。

$ symfony local:php:list

┌─────────┬───────────────────────────────────────┬─────────┬───────────────┬───────────────┬─────────┬─────────┐
 Version               Directory PHP CLI    PHP FPM    PHP CGI Server System?
├─────────┼───────────────────────────────────────┼─────────┼───────────────┼───────────────┼─────────┼─────────┤
 7.1.33 /Users/xxxxxx/.phpenv/versions/7.1.33 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.3.11 /usr bin/php sbin/php-fpm PHP FPM
 7.3.17 /Users/xxxxxx/.phpenv/versions/7.3.17 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.4.2 /Users/xxxxxx/.phpenv/versions/7.4.2 bin/php sbin/php-fpm bin/php-cgi PHP FPM
 7.4.5 /Users/xxxxxx/.phpenv/versions/7.4.5 bin/php sbin/php-fpm bin/php-cgi PHP FPM *
└─────────┴───────────────────────────────────────┴─────────┴───────────────┴───────────────┴─────────┴─────────┘

無事、 7.4.5 が有効になりました。

GitHubで編集を提案

Discussion