*Windows で動かすとページの凍結ができない [#x9e4d269] -ページ: BugTrack -投稿者: [[わたなべ]] -優先順位: 普通 -状態: 完了 -カテゴリー: 本体バグ -投稿日: 2003-02-10 (月) 09:35:07 -バージョン: **メッセージ [#l6ec7ced] -Windows 2000 pro -Apache 1.3.26 -PHP 4.2.2 + multibyte拡張(モジュールとして動作) -PukiWiki 1.3.3(配布版) で確認しました。 ---- *原因 [#ic75d984] Windows は改行コード cr/lf で動作しており、PukiWiki は lf のみを期待していたため、行末の判定にミスっていた。 *対策 [#nf8cd2a2] file.php を以下のように修正する。 @@ -148,6 +148,7 @@ if($_freeze === true || $_freeze === false) return $_freeze; $lines = get_source($page); + $lines = preg_replace("/\x0D\x0A|\x0D|\x0A/","\n",$lines); if($lines[0] == "#freeze\n") $_freeze = true; *対策中のやりとり [#pce6e922] -Windowsの改行コードがCRLFだから発生する問題ですね。 -- [[長月あきと]] SIZE(10){2003-02-10 (月) 11:01:30} -すぐに動かしたいという場合はWindows依存になっちゃいますが、file.phpの152行目(1.3.3の場合)を\nから\r\nに直してあげるととりあえずは動くと思います。 -- [[長月あきと]] SIZE(10){2003-02-10 (月) 11:04:29} -if($lines[0] == "#freeze\n") +if($lines[0] == "#freeze\r\n") -Windowsの改行コード絡みの問題って[[BugTrack/123]]にもありますね。 -- [[長月あきと]] SIZE(10){2003-02-10 (月) 11:34:50} -ページソースの入り口(get_source()あるいは$post['msg'])で'\r'を落とすようにすればいいと思うんですが。ほかに\rが入ってくる可能性がある経路があったかどうか… -- [[ぱんだ]] SIZE(10){2003-02-11 (火) 11:16:55} -そうですね、その方がいいですね…とりあえずこんな感じでしょうか? -- [[長月あきと]] SIZE(10){2003-02-12 (水) 11:02:43} @@ -148,6 +148,7 @@ if($_freeze === true || $_freeze === false) return $_freeze; $lines = get_source($page); + $lines = preg_replace("/\x0D\x0A|\x0D|\x0A/","\n",$lines); if($lines[0] == "#freeze\n") $_freeze = true; -どうせなら、get_source()の中で置き換えてしまいましょう。 -- [[ぱんだ]] SIZE(10){2003-02-13 (木) 15:18:09} file.php // ソースを取得 function get_source($page) { if(page_exists($page)) { - return file(get_filename(encode($page))); + return preg_replace("/\x0D\x0A|\x0D|\x0A/","\n", + file(get_filename(encode($page)))); } return array(); } -Windowsで凍結確認できました。素晴らしいです。 -- [[長月あきと]] SIZE(10){2003-02-13 (木) 15:31:34} -ただ、上記を導入すると#comment、#article、#voteなどのプラグインで必ず更新の衝突が発生するようです。 -- [[長月あきと]] SIZE(10){2003-02-13 (木) 16:04:13} -…そうですね。各プラグイン $digest = md5(@join("",@file(get_filename(encode($...))))) と、html.php/convert_html()内の $digest = md5(@join("",get_source($vars["page"]))); では、digest値が異なってしまいます。 -- [[ぱんだ]] SIZE(10){2003-02-13 (木) 20:27:37} -とりあえず1.3.3では、長月さんの案でいきましょうか。 -- [[ぱんだ]] SIZE(10){2003-02-13 (木) 20:33:52} -全部get_source()に統一((1.4では実施済))するのも手なんですが…プラグインも一緒に、となるとちょっと面倒ですね。 -- [[ぱんだ]] SIZE(10){2003-02-13 (木) 20:40:36} -プラグインも統一となるとかなり大掛りになりますもんね。ちなみに1.4はWindows上で快適に動作してますよ。 -- [[長月あきと]] SIZE(10){2003-02-14 (金) 09:06:33} -[[cvs:file.php]]を更新しました。(1.3.2.4) -- [[ぱんだ]] SIZE(10){2003-02-14 (金) 16:32:22} -改行コードの問題は bugtrack などのプラグインを始め、かなり広範囲に渡るので、個人的には 1.3 系列は Windows に対応しているとは言いがたい気がします。「1.4 で正式対応!」にしたらどうですか? -- [[わたなべ]] SIZE(10){2003-02-14 (金) 21:26:14} -確かに現状では改行の問題で使えないプラグイン多いですね。プラグイン使わないなら1.3.3でも特に問題無いんですけどね… -- [[長月あきと]] SIZE(10){2003-02-17 (月) 09:44:06} -うーん、でもプラグインを封印すると PukiWiki の面白さは半減しませんか?(^^; 現状だと、Windows ユーザーが気軽に試してみたときにけっこうガッカリするような気がするんですけど。 って、このバグとは直接関係しない話になりましたので、[[雑談]]へ誘導して、これは完了にします。-- [[わたなべ]] SIZE(10){2003-02-17 (月) 16:51:01} #comment //#comment