もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

symfony consoleでバージョンエラーが出た対応

はじめに

こんばんは。

備忘録です。

symfony cliをインストールして起こったこと & 対処法です。

本題

まず、symfony cliをインストール後コマンドを実行すると以下のようなエラーが出ました。

$ symfony console

Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.4.0". You are running 7.3.11. in /path/to/vendor/composer/platform_check.php on line 24
exit status 255

????????

$ php -v
PHP 7.4.16 (cli) (built: Apr 25 2021 08:08:01) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.16, Copyright (c), by Zend Technologies

????????????????????

phpのバージョンは 7.4.16なのに 7.3.11になってるってどういうことでしょう?

調べてみると、現状ローカルに phpenvを入れて、 7.4にしていて、macに入っていたもともとのバージョンはまさに 7.3.11でした。

もともとのバージョンの方を見られている??

phpenvでバージョン切り替えている意味は??

まぁじゃあいいや。

ということで、macphpバージョン自体をphpenvと同じ7.4.16にあげました。

その後同じく symfony console を実行しても、同じエラーが出ました。

ますます謎は深まります。

色々調べていたら、見つけました。

github.com

どうやら、 ~/.symfony/php_versions_2.json ってのが怪しそうです。

$ cat ~/.symfony/php_versions_2.json
[
    {
        "version": "7.3.11",
        "path": "/usr",
        "php_path": "/usr/bin/php",
        "fpm_path": "/usr/sbin/php-fpm",
        "cgi_path": "",
        "php_config_path": "/usr/bin/php-config",
        "phpize_path": "/usr/bin/phpize",
        "phpdbg_path": "",
        "is_system": false
    }
]%                                                                                         

これが犯人っぽいです。

symfonyコマンドでも発見できました。

$ symfony php -v
PHP 7.3.11 (cli) (built: Jun  5 2020 23:50:40) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies

これを変更するにはどうするの?と思って調べてたら、いいコマンドがありました。

$ symfony local:php:refresh

phpenvもcomposer 入れたときに rehashたたくしこれで行けそうです。

symfony local:php:refresh を実行後再度、 php_versions_2.json を確認すると

$ cat ~/.symfony/php_versions_2.json
[
    {
        "version": "7.3.11",
        "path": "/usr",
        "php_path": "/usr/bin/php",
        "fpm_path": "/usr/sbin/php-fpm",
        "cgi_path": "",
        "php_config_path": "/usr/bin/php-config",
        "phpize_path": "/usr/bin/phpize",
        "phpdbg_path": "",
        "is_system": false
    },
    {
        "version": "7.4.16",
        "path": "/usr/local/Cellar/php@7.4/7.4.16_1",
        "php_path": "/usr/local/Cellar/php@7.4/7.4.16_1/bin/php",
        "fpm_path": "/usr/local/Cellar/php@7.4/7.4.16_1/sbin/php-fpm",
        "cgi_path": "/usr/local/Cellar/php@7.4/7.4.16_1/bin/php-cgi",
        "php_config_path": "/usr/local/Cellar/php@7.4/7.4.16_1/bin/php-config",
        "phpize_path": "/usr/local/Cellar/php@7.4/7.4.16_1/bin/phpize",
        "phpdbg_path": "/usr/local/Cellar/php@7.4/7.4.16_1/bin/phpdbg",
        "is_system": true
    }
]                                                                             
$ symfony console -V
Symfony 5.2.6 (env: dev, debug: true)

エラーが出ず、実行することができました!

終わりに

インストールしたときによしなに見てくれるもんだと思って、無駄にハマってしまいました。

現場からは以上です。