とある環境で composer self-update [とあるバージョン]
を実行したら、シンタックスエラーやらSymfonyのCall to undefined functionやらが発生して、アップデートできないトラブルに見舞われました。
最終的には力技で解決したのですが、ハマったのでメモします。
Call to undefined function Symfony\Component\Console\Output\stream_isatty()
まず引っかかったのが、SymfonyのCall to undefined functionエラーです。
Uncaught Error: Call to undefined function Symfony\Component\Console\Output\stream_isatty() ...
エラーメッセージで検索したところ、解決策はGitHub issueに書いてありました。
Update to php 7.2 or run cachetool with NO_COLOR attribute:
NO_COLOR=true cachetool
https://github.com/gordalina/cachetool/issues/153
NO_COLOR=true
を付与して、composer self-updateすれば良いということになります。
NO_COLOR=true composer self-update
なぜSymfonyの関数エラーが発生したのか
これはずばり、GitHub issueに書いてある通りです。
Update to php 7.2...
私が触っている現在のPHP環境が、7.2より古かったため発生するエラーでした。
self-updateのシンタックスエラーについて
エラー内容の詳細は省きますが、これも調べた限り、手元のPHPバージョンが古いことで発生しているエラーだと分かりました。
そして、先ほどのSymfonyと違い、解決策もなさそうです。 最終的には方針を転換して、self-updateをcomposer再インストールに置き換えることで、対処しました。
# これは失敗した $ composer self-update 1.10.6 # アップデートしたいバージョンのcomposerを明示的に持ってきて、再インストールする wget https://getcomposer.org/download/1.10.6/composer.phar sudo mv composer.phar /usr/local/bin/composer
Most likely, you want to put the composer.phar into a directory on your PATH, so you can simply call composer from any directory (Global install), using for example:
sudo mv composer.phar /usr/local/bin/composer
https://getcomposer.org/download/
まとめ
composer self-updateのエラーは直せなかったですが、最終的にはアップデートしたいバージョンでcomposerを再インストールし、力技で解決しました。
本件のまとめですが、どちらのエラーもPHPが新しければ、そもそも遭遇しなかったはずのエラーです。 PHPをバージョンさせていくことの、重要性を痛感した一件でした。