現在わかっている問題
メニューの表示位置がおかしい サブメニューが並べる順序順に表示されない問題
並べる順序を指定していない場合に重複表示される 現在解決法が示されているもので上の3つかな? また新たに問題を発見してしまった。 変な例で申し訳ないがw 「きつね_うどん」と「きつ_つき」というメニューがあると「きつ」メニューのサブに「うどん」が表示されたりされなかったり(記事のあるなしで挙動が変わる)。 現在公式BBSの情報によりfunction.incにある問題のか所は修正されてこのようになっているんだけど(オレンジの部分)グリーンの部分を見て欲しい。
$sql = "select * from ".$_TABLES["topics"]." where topic like '".$topic_first."_%' ORDER BY sortnum,topic ASC";
あいまい検索の場合$topic_firstの後ろにある「_」が任意の1文字として扱われるため「%」1文字の場合と意味合いは同じになっている。何カ所かでこのあいまい検索が使われているので探ってみる。ちなみに「\_%」とエスケープするだけでは完全に直らなかった。
その後の調べで1階層目のデータをDBから引いてくる段階ですでに問題があることもわかった。先ほどの所のもう少し上を見てみると
$sql="select * from ".$_TABLES["topics"]." where topic like '".$topic_first."%'";
と、なっていてこの部分で第1階層「きつ」のときに「きつね」にもヒットしてしまっている。「きつ」に表示できる記事がなくとも「きつね」に記事がある場合表示フラグが立ってしまう。その後サブメニューでの表示判定で記事がないことになるのでメニューは表示されるが記事がないということになる。かといって%を取っ払うと2階層目のあるメニューがすべてヒットしなくなるのでダメだ。うーん、なにかカンタンな解決方法はないものか・・・
【重要】1.5.0jpr2でもこの影響を受けます ZIPファイルをアップロードした際に展開するよう設定を変更している場合で再現。アップロードされたファイルを一時的に展開するための作業フォルダを削除する際にエラーになります。初期設定は展開されないようになっているので、この影響は受けません。
今回初めてファイル操作をしている部分を開きましたが、日本語のファイル名でのアップロードはしないほうがよいでしょう。基本的にマルチバイト文字のことを考慮されずにプログラムが書かれています。
<geeklog>/public_html/mediagallery/lib-upload.php 988行 function MG_deleteDir($dir) { if (substr($dir, strlen($dir)-1, 1) != '/') $dir .= '/'; if ($handle = opendir($dir)) { while ($obj = readdir($handle)) { if ($obj != '.' && $obj != '..') { if (is_dir($dir.$obj)) { if (!deleteDir($dir.$obj)) return false; } elseif (is_file($dir.$obj)) { if (!unlink($dir.$obj)) return false;
青字部分を
if (!rmdir($dir.$obj))
に変更してください。 参考記事