DokuWiki中的特殊搜索错误

时间:2011-04-13 18:18:41

标签: php dokuwiki

DokuWiki forums

交叉发布此内容

所以,我做了一些修改,以便允许三件事:页面名称中的大写,侧栏ToC中的自然案例排序和不区分大小写的搜索。

忍受我,因为我知道这看起来像文件权限错误。我不相信。

在搜索“nul”及其任何变体(nUl,Nul,nuL等)时,收到以下错误消息:

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 365

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 366

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 367

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 368

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 369

Warning: filesize() [function.filesize]: stat failed for C:/Websites/dokuwiki/data/meta/nul.changes in C:\Websites\dokuwiki\inc\changelog.php on line 305

没有,也从来没有一个名为“nul”的页面。搜索完成后,它会向\ dokuwiki \ data \ index \ page.idx添加一个新行,其内容与我搜索的内容相同(nul,NuL,nUl等等)。一旦将该行添加到page.idx,任何搜索字母“n”“u”或“l”也将导致错误:

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 365

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 366

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 367

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 368

Warning: Cannot unset offset in a non-array variable in C:\Websites\dokuwiki\inc\parserutils.php on line 369

Warning: filectime() [function.filectime]: stat failed for C:/Websites/dokuwiki/data/pages/nul.txt in C:\Websites\dokuwiki\inc\parser\metadata.php on line 46

Warning: filemtime() [function.filemtime]: stat failed for C:/Websites/dokuwiki/data/pages/nul.txt in C:\Websites\dokuwiki\inc\parser\metadata.php on line 72

再一次,页面“nul”在维基上并不存在,并且在搜索时被写入page.idx。

以下是我为实现我在帖子开头提到的三件事所做的修改:

/inc/fulltext.php,第255和263行:我将“strpos”替换为“stripos”。

if ($id !== '' && $cleaned !== '') {
        foreach ($pages as $p_id => $p_title) {
            if ((stripos($in_ns ? $p_id : noNSorNS($p_id), $cleaned) === false) &&
                (!$in_title || (stripos($p_title, $id) === false)) ) {
                unset($pages[$p_id]);
            }
        }
    }
    if (isset($ns)) {
        foreach (array_keys($pages) as $p_id) {
            if (stripos($p_id, $ns) !== 0) {
                unset($pages[$p_id]);
            }
        }
    }

/inc/pageutils.php,第114行已删除:

//$id = utf8_strtolower($id);

/inc/search.php,第40和41行:我用“natcasesort”替换了“sort”

natcasesort($files);
natcasesort($dirs);

据我所知,这些都是微不足道的变化,我没有看到任何可能导致此问题的明显变化。

有什么想法吗?

更新 -

我恢复了所有更改,错误仍然存​​在。

然后我在一个完全独立的目录中安装了一个新的DokuWiki(Release 2010-11-07a“Anteater”),错误仍然存​​在。

然后我从splitbrain.org安装了每晚快照,错误仍然存​​在。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

事实证明,由于“NUL”被保留,这是Windows特定的错误。根据查尔斯的建议,我将在此处以及在原始评论中链接的论坛帖子中发布答案。我觉得这是一个kludgey修复,但我需要让它工作。我只是将单词“nul”重写为ASCII字符,然后将其翻译回页面和标题中显示:

\ inc \ pageutils.php,第137行(ish):

if(strtolower($id) == 'nul') {
    for($i=0;$i != strlen($id);$i++) {
        $stupidWindowsFix .= "&#".ord($id[$i]).";";
    }
    $id = $stupidWindowsFix;
}

\ inc \ template.php,第876行:

$name = html_entity_decode($id);