EC-CUBE でオーナーズストアで購入した商品がダウンロード出来ないときの原因と対策(PHP5.2.0以降)

EC-CUBE オーナーズストア管理の購入商品一覧
もう一点はまった事があったのでここに書いておく。

EC-CUBE 管理画面のオーナーズストア管理で、決済モジュールのダウンロードができずにはまった。

特に、今回は 2.4.3 から 2.4.4 へのアップデートもやったので、その時のミスかと思い、なかなか原因を突き止められなかった。

で、色々と調べていて json で返してくるはずのデータが壊れているというところまで判断ついた( ownersstore.log にどこまで進んでいるのかが残されていたので、そのあたりの変数値を log に吐いたりして調べた)。

そこからは早かった。EC-CUBEのソースコードにちゃんと書いてある(ちょっと見直した。)

miyabe-desktop% cd eccube-2.4.4/data/class/pages/upgrade/helper 
miyabe-desktop% vi LC_Upgrade_Helper_Json.php

ソースコードの 77行目から。

<?php
   
/**
     * JSONデータをデコードする.
     *
     * php5.2.0からpreg_match関数に渡せるデータ長に制限がある(?)ため,
     * Services_JSONが正常に動作しなくなる.
     * そのため5.2.0以上の場合は組み込み関数のjson_decode()を使用する.
     *
     * @param string $str
     * @return StdClass
     */
   
function decode($str) {
        if (
function_exists('json_decode')) {
           
LC_Upgrade_Helper_Log::log(' *use json_decode()');
            return
json_decode($str);
        }

        LC_Upgrade_Helper_Log::log(' *use Services_JSON::decode()');
        return
parent::decode($str);
    }
?>

原因は、EC-CUBE側では json_decode を使うことを期待しているのに、そのサーバは json_decode が有効になっていなかったので、(PHP5.2.0以降では正しく動作しない) Services_JSON が使われてしまっていたということだった。

このサーバでは、/usr/local/php/etc/extensions.ini に拡張機能を有功にするかどうかが設定されているので、

;extension=imap.so
extension=json.so
;extension=kakasi.so

のように extension=json.so が有効になるように、行頭の ; を外した。

レンタルサーバとか使う場合は、特に注意しないとね。

新しいコメントの投稿

このフィールドの内容は非公開にされ、公表されることはありません。
  • HTMLタグは使用できません
  • 行と段落は自動的に折り返されます。

書式オプションに関するより詳しい情報...

CAPTCHA
この質問はあなたが人間であるかどうかについて調べる為と、自動化したスパムを防ぐ為のものです。うまくいかない場合は電子メールでお問い合わせ下さい。
イメージ CAPTCHA
画像の中に見える文字を入力して下さい