2011-04-13 124 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);