XPressME Integration Kit

Codex

データベース接続エラーが発生

症状

モジュールトップにアクセスしたとき

Error establishing a database connection

が表示される

WordPress管理にアクセスしたとき

error_database_connection_1

が表示される

原因

この現象はXPressMEがXOOPSよりデータベース接続情報を取得できない場合に発生します。

XPressMEがXOOPSよりデータベース接続情報を正しく取得しているかどうかは、システム情報の「XPressMEがXOOPSより取得した設定値」にて確認できます。

正常時

error_database_connection_2

取得できていない場合 NG箇所が赤字表示されます。

error_database_connection_3

正常に取得できない場合、XOOPSのmainfile.phpの構成が標準状態と異なっている場合が考えられます。

XPressMEはXOOPSシステムをロードすることなくデータベースの接続情報を取得するために、XOOPSのmainfile.phpを読み取り、接続情報を取得している為、下記条件の場合正常に読み込めない場合があります。

  1. define文を条件分岐している。
  2. define文がmainfile.phpにはなくmainfile.phpからinclude(require)されたファイルにある。(ImpressCMSの場合を省く)

対策

標準以外のmainfile.phpを使用する場合

xoops_trust_path側にdefine処理を行うmainfile.phpというファイルを置き、XOOPS_ROOT_PATH側のmainfile.php側からinclude(require)するようにしてください。

XOOPS_ROOT_PATH側のmainfile.php例

<?php
if ( !defined("XOOPS_MAINFILE_INCLUDED") ) {
    define("XOOPS_MAINFILE_INCLUDED",1);
	require_once('C:\xampp\cube_trust/mainfile.php');

    // You can select two special module process excuting mode with defining following constants
    //
    //  define('_LEGACY_PREVENT_LOAD_CORE_', 1);
    //    Module process will not load any XOOPS Cube classes.
    //    You cannot use any XOOPS Cube functions and classes.
    //    (eg. It'll be used for reffering only MySQL Database definition.)
    //
    //  define('_LEGACY_PREVENT_EXEC_COMMON_', 1);
    //    Module process will load XOOPS Cube Root class and initialize Controller class.
    //    You can use some XOOPS Cube functions in this mode.
    //    You can use more XOOPS Cube functions (eg. xoops_gethandler), if you write
    //       $root=&XCube_Root::getSingleton();
    //       $root->mController->executeCommonSubset();
    //    after including mainfile.php.
    //    It is synonym of $xoopsOption['nocommon']=1;
    //    But $xoopsOption['nocommon'] is deprecated.
    //
    if (!defined('_LEGACY_PREVENT_LOAD_CORE_') && XOOPS_ROOT_PATH != '') {
        include_once XOOPS_ROOT_PATH.'/include/cubecore_init.php';
        if (!isset($xoopsOption['nocommon']) && !defined('_LEGACY_PREVENT_EXEC_COMMON_')) {
            include XOOPS_ROOT_PATH.'/include/common.php';
        }
    }
}
?>

自動取得を無効にする場合

XPressMEはxp-config.phpが存在する場合、XOOPS mainfile.phpの読み取りを行わず、xp-config.phpの設定に従ってデータベース接続を行います。

xp-config.phpは、モジュールトップにあるxp-config-sample.phpを参考にdefine文にmainfile.phpに設定した値と同じ値をします。