2

DokuWikiフォーラムからこれをクロスポストします:

そこで、ページ名の大文字化、サイドバーのToCでの自然な大文字と小文字の並べ替え、大文字と小文字を区別しない検索の3つを可能にするためにいくつかの変更を加えていました。

これはファイルのアクセス許可エラーのように見えるので、我慢してください。私はそうは思わない。

「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」という名前のページはありませんし、これまでにありませんでした。検索が完了すると、検索したものと同じコンテンツ(nul、NuL、nUlなど)を含む新しい行が\ dokuwiki \ data \ index\page.idxに追加されます。その行が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に書き込まれます。

投稿の冒頭で述べた3つのことを達成するために行った変更は次のとおりです。

/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 に答える