スポンサーリンク

Heroku/Laravel5.8/PHP7.4 ERROR: Trying to access array offset on value of type null

Overview

2019年4月頃に作成したLaravelのアプリをHeroku環境で運用していました。
そして2020年2月、アプリを改修しローカルで動作確認後にデプロイしたところエラーが…!

落ち込む人

Environment

PHP on local

$ php -v
PHP 7.1.33 (cli) (built: Feb 14 2020 16:47:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.33, Copyright (c) 1999-2018, by Zend Technologies

PHP on Heroku

=> 7.4.2
PHP 7.4 now available on Heroku
Herokuにアップデートの記事が2020/02/10付けで出ていました。

Laravel

composer.json

"laravel/framework": "5.8.*",

composer.lock

"version": "v5.8.14",

Laravelが指定しているphpのバージョン composer.json

"php": "^7.1.3",

Errors

 [2020-02-14 15:26:14] staging.ERROR: Trying to access array offset on value of type null {"exception":"[object] (ErrorException(code: 0): Trying to access array offset on value of type null at /app/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php:147)

メールのバリデーション(今回の修正ではなにも触っていない)のところでエラーが発生していました。

このエラーログでググってみるとどうやらPHPが7.4に上がったことが原因のようですね。

Tried

とりあえず、composer.jsonは修正せずに

composer update

を実行してライブラリを最新にしてみました。

そしたら、先ほどエラーが発生していたところは通るようになりました!

が、しかし!

別の場所で同様のエラーが発生…

staging.ERROR: Trying to access array offset on value of type null (View: /app/resources/views/xxxxx/xxxxx.blade.php) {"exception":"[object] (ErrorException(code: 0): Trying to access array offset on value of type null	
困った人

Workaround

気持ちとしてはPHP7.4で動かしたかったのですが、急ぎということもあって、
暫定対応としてPHPのバージョンを下げるで今回発生したエラーを一旦回避することにしました。

composer.json

"php": ">=7.1.3,<7.4",

上記のように修正して、

composer update

を実行して最新化後にデプロイすると今まで通り動くようになりました。

HerokuのPHPのバージョンは

$ php -v
PHP 7.3.14

となっていました。

What I have to do

PHP7.4で何が変わってこのようなエラーが発生するようになったのか、そもそもPHP7.4の仕様のアップデートをキャッチアップする必要があります。
新しい仕様が把握できたら今回のエラーの発生原因を特定し、修正方法を見つけ次第こちらの記事を更新したいと思います。

また、Laravelのリリースノートによると5.8は2020年2月26日でセキュリティサポートが切れるとのことなので6系への移行が必要になります。
移行についても引っかかるポイントがあるはずですので、頑張ってトライしてみたいと思います。

※追記(2020/02/18)

Laravelのバージョンを6.0へアップデートする方法記事を別途書きましたのでご参照ください。

コメント

タイトルとURLをコピーしました