鯖メシ

サーバー素人がレンタルサーバーの無料お試しを使った感想を記録しています

X2サーバーに EC-CUBE をインストールする方法|エックスツー

EC-CUBE は国産のECサイトで、管理画面が使いやすいのが特長です。

X2サーバーでは、始めたのかたでも EC-CUBE をすぐにインストールできます。

ここでは、X2サーバーの便利な機能“ワンクリックインストール”を使ったEC-CUBEの導入と表示チェック方法について分かりやすく解説します。

f:id:okinawapunk:20160426140210j:plain

「更新情報の取得に失敗しました。」というエラーの対処法
エックスツーでEC-CUBEをインストールすると、管理画面に「更新情報の取得に失敗しました。」というエラーメッセージが表示されました(2015年1月現在)。この解決策に関してはエラーメッセージの対処法をご確認ください。
※ この記事は、2015年1月にレンタルサーバーを操作した時のメモ書きを編集してまとめたものです。

1.ワンクリックインストールを使用する

まず最初に、下図の画面にアクセスして" Ec Cube "の「インストール設定」をクリックしましょう。(※ 画面のアクセス方法が分からない方は、ワンクリックインストール画面へのアクセス方法をお読みください)

f:id:okinawapunk:20160426134723p:plain

2.EC-CUBE をインストールする

すると次の通り EC-CUBE のインストール設定画面にアクセスします。

f:id:okinawapunk:20160426134724p:plain

ここでは例として、URLをシンプルなドメイン名にするため「ショップインストール先」を空白にしておきます。

f:id:okinawapunk:20160426134725p:plain

データベースは、「自動でデータベースを生成する」を選択します。管理IDと管理パスワードは、EC-CUBE管理画面のログイン情報となります。

設定が終わったら「インストールする(確認)」をクリックしましょう。

すると確認画面が表示されるので、念のため問題ないか確認して「インストールする(確定)」をクリックしましょう。

f:id:okinawapunk:20160426134726p:plain

「index.html」削除のメッセージについて
ここでのケースでは、「index.html が削除されます」というメッセージが表示されますが、初めてインストールする場合は特に気にする必要はありません。ただし、サブドメインを利用する場合はドメイン名の間違えがないかしっかり確認しましょう。

EC-CUBE のインストールが完了するまで時間がかかるので、しばらく待ちましょう。完了したら次の画面が表示されます。インストールは以上となります。

f:id:okinawapunk:20160426134727p:plain

ただし、サイトが問題なく表示されるかの確認を行いましょう。「ログインフォーム」のURLをクリックするとログイン画面にアクセスします。

3.サイトを確認する

ログイン画面にアクセスしたら、先ほど設定した EC-CUBE のログイン情報(管理者IDと管理パスワード)を入力し、「LOGIN」をクリックします。

f:id:okinawapunk:20160426134728p:plain

管理画面にアクセスできると次のような画面が表示されます。次はサイト表示をチェックしましょう。「SITE CHECK」をクリックするとサイトが表示されます。(上部のエラーメッセージについては後述しています)

f:id:okinawapunk:20160426134729p:plain

次のようにサンプルサイトが表示されます。

f:id:okinawapunk:20160426134730p:plain

以上で EC-CUBE のワンクリックインストールは完了です。

管理画面にエラーメッセージが表示されたときの対処法

 EC-CUBE のワンクリックインストールすると、管理画面の上部に「更新情報の取得に失敗しました。」というエラーメッセージが表示されました。このエラーが表示されないようにするには、PHPファイルの修正が必要になります。

まずFTPソフトでサーバーにアクセスして、下記のファイルをダウンロードします。

/data/class/pages/admin/LC_Page_Admin_Home.php

そしてこのファイルを修正します。実際には下記のマークした部分のソースを追記しました。ここでは、ステンレスコード様のサイト記事のソースを転載させていただきました。

「// ここから」〜「// ここまで追加」が2箇所あります。その箇所をコピーして貼り付けます。

※ソースを書き間違えると管理画面にログインできないなどの不具合が発生します。作業を行うときは必ずファイルのバックアップをとって行いましょう。 
    /**
     * リリース情報を取得する.
     *
     * @return array 取得した情報配列
     */
    public function lfGetInfo()
    {
        // 更新情報の取得ON/OFF確認
        if (!ECCUBE_INFO) return array();

        // パラメーター「UPDATE_HTTP」が空文字の場合、処理しない。
        // XXX これと別に on/off を持たせるべきか。
        if (strlen(UPDATE_HTTP) == 0) return array();

        $query = '';
        // サイト情報の送信可否設定
        // XXX インストール時に問い合わせて送信可否設定を行うように設定すべきか。
        // XXX (URLは強制送信すべきではないと思うが)バージョンは強制送信すべきか。
        if (UPDATE_SEND_SITE_INFO === true) {
            $query = '?site_url=' . HTTP_URL . '&eccube_version=' . ECCUBE_VERSION;
        }

        $url = UPDATE_HTTP . $query;

        // タイムアウト時間設定
        $context = array('http' => array('timeout' => HTTP_REQUEST_TIMEOUT));

        $jsonStr = @file_get_contents($url, false, stream_context_create($context));

    // ここから
    if( empty($jsonStr) ) {
        $jsonStr = $this->do_get($url);
    }
    // ここまで追加

        $arrTmpData = is_string($jsonStr) ? SC_Utils_Ex::jsonDecode($jsonStr) : null;

        if (empty($arrTmpData)) {
            SC_Utils_Ex::sfErrorHeader('>> 更新情報の取得に失敗しました。');

            return array();
        }
        $arrInfo = array();
        foreach ($arrTmpData as $objData) {
            $arrInfo[] = get_object_vars($objData);
        }

        return $arrInfo;
    }
// ここから
function do_get($url) {
    $res = $this->get_contents($url);
    $res_array = explode("\r\n", $res);
    switch ($res_array[0]) {
        case 'HTTP/1.0 200 OK':
        case 'HTTP/1.1 200 OK':
            $ra = explode("\r\n\r\n", $res, 2);
            $res = $ra[1];
            break;
        case 'HTTP/1.1 302 Found'://追記したところ
        case 'HTTP/1.1 302 MovedTemporarily':
            foreach ($res_array as $res_row) {
                if (strstr($res_row, 'Location: ')) {
                    $crr_url = str_replace('Location: ', '', $res_row);
                    break;
                }
            }
            $res = $this->get_contents($crr_url);
     
            $ra = explode("\r\n\r\n", $res, 2);
            $res = $ra[1];
            break;
        default:
            $res = '';
    }
     
    return $res;
     
}
     
function get_contents($url) {
    $url_array = parse_url($url);
    $host = $url_array['host'];
    $path = $url_array['path'];
    if (array_key_exists('port', $url_array)) {
        $port = $url_array['port'];
    } else {
        switch ($url_array['scheme']) {
            case 'http':
                $port = 80;
                break;
        }
    }
    $query = $url_array['query'];
     
    $res = false;
    if (isset($host) && isset($port)) {
        $fp = fsockopen($host, $port, $errno, $errstr, 30);
        if ($fp) {
            $req
                = "GET " . $path . "?" . $query . " HTTP/1.0\r\n"
                . "Host: " . $host . "\r\n"
                . "\r\n";
             
            socket_set_timeout($fp, 10);
            if (fputs($fp, $req, strlen($req))) {
                $res = '';
                while (!feof($fp)) {
                    $res .= fgets($fp);
                }
            }
            fclose($fp);
        }
    }
    return $res;
}
// ここまで追加
}

修正したファイルをアップロードして、管理画面にアクセスしてみましょう。エラーメッセージが非表示になっていたらOKです。