【发布时间】:2011-04-13 18:18:41
【问题描述】:
从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”在 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 安装了夜间快照,但错误仍然存在。
有人有什么想法吗?
【问题讨论】:
-
事实证明,这是由于“NUL”被保留而导致的 Windows 特定错误。我在原始问题中链接的论坛帖子中发布了修复。
-
您应该将其发布为答案并将其标记为已接受——这是一个令人愉快的边缘案例。
-
它不会让我再接受我自己的答案两天,但我已经发布了!