2011-04-13 122 views
2

交叉张贴从DokuWiki forums这样的:奇特的搜索错误DokuWiki中

所以,我做了一些修改,以允许三两件事:在页面名称资本,自然情况下,在侧边栏的ToC排序和案例不敏感的搜索。

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

在搜索“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”

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

据我所知,这些都是微小的变化,我没有看到任何立即显而易见的事情会导致此问题。

任何想法?

更新 -

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

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

然后我安装了splitbrain.org的夜间快照,错误依然存在。

任何人有任何想法?

+0

事实证明,这是一个Windows特定的错误是由于 “NUL” 被保留。我在我的原始问题链接的论坛帖子中发布了一个修复程序。 – 2011-04-13 19:30:56

+0

您应该将其作为答案发布,并将其标记为已接受 - 这是一个令人愉快的边缘案例。 – Charles 2011-04-14 03:31:26

+0

它不会让我接受我自己的答案另外两天,但我已经发布了它! – 2011-04-14 05:22:04

回答

0

事实证明,由于“NUL”被保留,这是Windows特定的错误。根据Charles的建议,我会在这里发布答案,以及在我原评论中链接的论坛帖子中。我觉得这是一个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);