データベースが大文字小文字を区別しない環境での問題
永らくありがとうございました › フォーラム › バグ報告と提案 › データベースが大文字小文字を区別しない環境での問題
-
投稿者投稿
-
2013 年 10 月 29 日 1:42 PM #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’, ‘(大文字の名前)’);
を大文字の名前を小文字の名前に書き換えたところ、前述のすべてのモジュールでサイトマップに表示されました。よろしくお願い致します。
2013 年 10 月 30 日 7:47 AM #3488toemon
キーマスター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(アイ)を加えることで大文字・小文字の区別なしになると思いますが、いかがでしょうか?
2013 年 10 月 31 日 2:25 PM #3489匿名
ゲストtoemonさん、早速のお返事ありがとうございます。
> 上記のように、preg_matchにマッチ演算子 i(アイ)を加えることで大文字・小文字の区別なしになると思いますが、いかがでしょうか?
その修正で問題が解消されることを確認しました。
そのように(大文字小文字を区別)されている特段の事情がないようであれば、次回のバージョンアップ時に修正を盛り込んでいただけると助かります。
よろしくお願い致します。
2013 年 11 月 2 日 12:10 AM #3490toemon
キーマスターご確認ありがとうございます。
チケット #428に登録チェンジセット 844で修正を行いました。
そのように(大文字小文字を区別)されている特段の事情がないようであれば、次回のバージョンアップ時に修正を盛り込んでいただけると助かります。
バージョン2.5.0に反映いたします。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。