XPressME Integration Kit

フォーラム

データベースが大文字小文字を区別しない環境での問題

永らくありがとうございました フォーラム バグ報告と提案 データベースが大文字小文字を区別しない環境での問題

  • このトピックには3件の返信、2人の参加者があり、最後にtoemonにより9年、 4ヶ月前に更新されました。
4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • 投稿者
    投稿
  • #2711
    匿名
    ゲスト

    toemonさん、こんばんは。

    トラブルというわけではないのですが、
    http://www.xugj.org/modules/QandA/index.php?topic_id=2360
    の件があり、ローカルに環境を作っていて気付きましたのでご報告します。

    ローカル環境に移行したころ、sitemapモジュールで、xpressの分だけ、カテゴリ毎のリンクが全くサイトマップに表示されなくなりました。

    当初、PHPのバージョンが変わったせいだと思っていたのですが、そうではありませんでした。

    maysqlが大文字小文字の区別をしない環境に変わっていたのでした。

    mainfile.phpの
    define(‘XOOPS_DB_NAME’, ‘(大文字の名前)’);
    に大文字の名前で登録してあって、
    実際のデータベースが大文字小文字を区別しない(=すべて小文字として扱われる)となっていると、

    general_functions.phpの以下のロジックで、不一致となり、サイトマップに表れないのだと分かりました。

    <code>// Get Multi Blog table list for WordPressMU<br />
    if (!function_exists('get_table_list')){<br />
    function get_table_list($wp_prefix = '',$table_name = ''){<br />
    global $xoopsDB,$xoops_db;<br />
    <br />
    $table_list = array();<br />
    $ret = array();<br />
    $wp_prefix = preg_replace('/_$/', '',$wp_prefix);<br />
    $pattern = $wp_prefix . '_' . $table_name . '|' . $wp_prefix . '_[0-9]*_' . $table_name;<br />
    <br />
    if (!empty($wp_prefix) && !empty($table_name)){<br />
    $sql = "SHOW TABLES LIKE '" . $wp_prefix  . '%' . $table_name . "'";<br />
    <br />
    if (empty($xoops_db)) { // not load XPressME<br />
    if($result = $xoopsDB->queryF($sql)){<br />
    while($row = $xoopsDB->fetchRow($result)){<br />
    if(preg_match('/' . $pattern . '/' , $row[0])){<br />
    $table_list[] = $row[0];<br />
    }<br />
    }<br />
    }<br />
    } else { // load XPressME or not Load XOOPS<br />
    (略)<br />
    }<br />
    }<br />
    return $table_list;<br />
    }<br />
    }</code>

    仕様かな?とも思うのですが、最初に書いたXUGJの記事に書いたようなモジュールでは、XPRESS以外はサイトマップに表れなくなるような現象はありませんでしたのでお知らせします。

    ちなみに、
    mainfile.phpの
    define(‘XOOPS_DB_NAME’, ‘(大文字の名前)’);
    を大文字の名前を小文字の名前に書き換えたところ、前述のすべてのモジュールでサイトマップに表示されました。

    よろしくお願い致します。

    #3488
    toemon
    キーマスター

    heijiさん、こんにちは

    詳しく解析していただきありがとうございます。

    SHOW TABLESでクエリーしたテーブル名が小文字になってしまい

    <code>if(preg_match('/' . $pattern . '/' , $row[0])){<br />
    $table_list[] = $row[0];<br />
    }</code>

    の部分のpreg_matchが大文字・小文字の区別を行っているためにテーブルが見つけられない状態になってしまったものと思われます。

    <code>if(preg_match('/' . $pattern . '/i' , $row[0])){<br />
    $table_list[] = $row[0];<br />
    }</code>

    上記のように、preg_matchにマッチ演算子 i(アイ)を加えることで大文字・小文字の区別なしになると思いますが、いかがでしょうか?

    #3489
    匿名
    ゲスト

    toemonさん、早速のお返事ありがとうございます。

    > 上記のように、preg_matchにマッチ演算子 i(アイ)を加えることで大文字・小文字の区別なしになると思いますが、いかがでしょうか?

    その修正で問題が解消されることを確認しました。

    そのように(大文字小文字を区別)されている特段の事情がないようであれば、次回のバージョンアップ時に修正を盛り込んでいただけると助かります。

    よろしくお願い致します。

    #3490
    toemon
    キーマスター

    ご確認ありがとうございます。

    チケット #428に登録チェンジセット 844で修正を行いました。

    そのように(大文字小文字を区別)されている特段の事情がないようであれば、次回のバージョンアップ時に修正を盛り込んでいただけると助かります。

    バージョン2.5.0に反映いたします。

4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。