implode(): Passing glue string after array is deprecated. Swap the parameters

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がエラーとなる事。

ログにはこんなエラーが刻まれています。

最初はWorkの処理関係を疑いました。
でも同じくQueueを使っているメール送信は動いているので違うような気もする…。

そんな時はDebugMode起動!

今回のDocker化では今まで存在していた3つのモードを統合+DebugModeを切り替えて使えるようにしたんです。

今までは『自社用(テスト機能入り)』『販売用(安定機能のみVer.)』『DEMO用(一部機能のOFF)』という3本を作成していたため「あっちは更新したけど、こっちは忘れてる」なんてことが発生していました。1本のシステムにして切り替え式にすれば、開発も1本分で済み最新のシステムを素早く提供できる状態になります。
そして、新たに追加した『DebugMode』では非同期処理も同期処理するように仕掛けました。
これでスクリプトのミスを動かしながらつぶせます。

さっそくモードを切り替えて実行した所、こんなエラーが出ました。

「implodeでエラー?」

implodeのエラー原因はPHP7.4の変更点にあった

implode関数の引数を逆にできなくなったそうです。

なるほど、確かにエラーの発生している場所は逆に書いてある。

修正して実行 => オールグリーン

どうやらPHP7.4への変更でハマった場所は(API出品では)ここだけらしく、修正したら無事に解決いたしました。

まとめ

様々なサイトさんを参考にさせて頂くと、その参考にした方の書き方がそのまま使われている事があります。
今回もそんな例で、エラーの起こったパーツのみ『逆』に書かれていました。

「参考するにしてもコピーの様な使い方はよくないなぁ」と痛感した出来事でした。