implode(): Passing glue string after array is deprecated. Swap the parameters
implode(): Passing glue string after array is deprecated. Swap the parameters
結論を先に。
PHP7.4では変更点がかなりある様で、このエラーもPHP7.4でそれまで認められていた記載方法をNGとした事が原因でした。
PHP8にしたら変更点がもっとあると考えるとちょっと怖いですね。
という事で、今回はそんなお話です。
切っ掛けは楽天市場の商品情報更新(API)のJOBエラー
Docker化&Laravel6化でどこかにエラーが出るだろうと思い一通りの機能をテストしています。
そんな中で見つかったのが「楽天市場の商品を更新できない」という事案。直接の原因はJOBがエラーとなる事。
1 |
\CallQueuedHandler@call","maxTries":1,"delay":null,"timeout":1080,"timeoutAt":null,"data": |
ログにはこんなエラーが刻まれています。
最初はWorkの処理関係を疑いました。
でも同じくQueueを使っているメール送信は動いているので違うような気もする…。
そんな時はDebugMode起動!
今回のDocker化では今まで存在していた3つのモードを統合+DebugModeを切り替えて使えるようにしたんです。
今までは『自社用(テスト機能入り)』『販売用(安定機能のみVer.)』『DEMO用(一部機能のOFF)』という3本を作成していたため「あっちは更新したけど、こっちは忘れてる」なんてことが発生していました。1本のシステムにして切り替え式にすれば、開発も1本分で済み最新のシステムを素早く提供できる状態になります。
そして、新たに追加した『DebugMode』では非同期処理も同期処理するように仕掛けました。
これでスクリプトのミスを動かしながらつぶせます。
さっそくモードを切り替えて実行した所、こんなエラーが出ました。
1 |
implode(): Passing glue string after array is deprecated. Swap the parameters |
「implodeでエラー?」
implodeのエラー原因はPHP7.4の変更点にあった
implode関数の引数を逆にできなくなったそうです。
1 2 3 |
implode([1, 2], ','); // Deprecated: implode(): Passing glue string after array is deprecated implode(',', [1, 2]); // OK implode([1, 2]); // OK ','区切りと同じ |
なるほど、確かにエラーの発生している場所は逆に書いてある。
修正して実行 => オールグリーン
どうやらPHP7.4への変更でハマった場所は(API出品では)ここだけらしく、修正したら無事に解決いたしました。
まとめ
様々なサイトさんを参考にさせて頂くと、その参考にした方の書き方がそのまま使われている事があります。
今回もそんな例で、エラーの起こったパーツのみ『逆』に書かれていました。
「参考するにしてもコピーの様な使い方はよくないなぁ」と痛感した出来事でした。
-
前の記事
超簡単。Laravel5.5からLaravel6へのバージョンアップ 2020.05.02
-
次の記事
ポイントアップで売上UP効果はあったが利益が減少していた 2020.05.11
コメントを残す