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 が有効になるように、行頭の ; を外した。
レンタルサーバとか使う場合は、特に注意しないとね。

新しいコメントの投稿