🎻

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

2020/07/14に公開

起こったこと

なんか、ある日ふと気付いたら 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