久しぶりにPHPのコードを触ったところ、VisualStudioCodeに入れていたphpcsが動作しないことに気づきました。
ファイルを開いたときに「phpcs: Unexpected token P in JSON at position 0」というエラーが出て
phpcsが動作してくれないのです…
PSR-2に準拠しないコードはレビュー通しまへんでー、と言った本人はなぜかこんなところでちょっと苦戦してました…
前は動いていたのに…
調べてもあまり情報がなかったのでお役に立てれば。
環境
名前 | バージョン |
---|---|
PHP | 7.1.8 |
PHP_CodeSniffer | 3.0.2 |
VS Code | 1.16.1 |
VS Code phpcs | 0.7.0 |
エラー内容
VisualStudioCodeでPHPのファイルを開くと以下のメッセージが表示され、
phpcsが動作しませんでした。
phpcs: Unexpected token P in JSON at position 0
解決法
結論からいうと、PHPライブラリが読み込めていないなどの理由でPHPコマンドでWarningが出ていると、
件のエラーになります。
なのでWarningを出さないよう環境を直す必要があります。
$ php --version
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
Referenced from: /usr/local/opt/php71-imagick/imagick.so
Reason: image not found in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
Referenced from: /usr/local/opt/php71-imagick/imagick.so
Reason: image not found in Unknown on line 0
PHP 7.1.8 (cli) (built: Aug 7 2017 15:02:45) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.8, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
imagick関連でWarningのメッセージが出力されています。
もちろんphpcsコマンドを実行してもWarningが出ます。
$ phpcs --version
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
Referenced from: /usr/local/opt/php71-imagick/imagick.so
Reason: image not found in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
Referenced from: /usr/local/opt/php71-imagick/imagick.so
Reason: image not found in Unknown on line 0
PHP_CodeSniffer version 3.0.2 (stable) by Squiz (http://www.squiz.net)
なので、
php71-imagickはほとんど使用していないので削除しました。
$ brew uninstall php71-imagick
$ rm -f /usr/local/etc/php/7.1/conf.d/ext-imagick.ini
$ php --version
PHP 7.1.8 (cli) (built: Aug 7 2017 15:02:45) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.8, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
Warningが消えました。
この状態で再度VisualStudioCodeでPHPファイルを開くとエラーは出ず、正常にphpcsが動作するようになりました。
今回はphp71-imagickをアンインストールしましたが、
Warningを出ないようにすればOKです。
参考
GitHubのissue で同様の事象が報告されていましたが、
自分の場合は該当しませんでした。
違うパターンではもしかしたら上記のイシューも役にたつかもしれません。