2

从DokuWiki 论坛交叉发布:

因此,我进行了一些修改以允许三件事:页面名称中的大写、侧边栏 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”在 wiki 上从未存在过,并且在搜索时被写入 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 行:我将“sort”替换为“natcasesort”

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

据我所知,这些都是微小的变化,我看不出有任何明显会导致这个问题的东西。

有任何想法吗?

更新-

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

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

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

有人有想法么?

4

1 回答 1

0

事实证明,这是由于“NUL”被保留而导致的 Windows 特定错误。根据查尔斯的建议,我将在此处以及在我原始评论中链接的论坛帖子中发布答案。我觉得这是一个笨拙的修复,但我需要让它工作。我只是将单词“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);
于 2011-04-14T05:21:41.933 回答