#author("2017-08-23T06:30:46+09:00;2005-04-10T21:55:32+09:00","","")
*ページを更新するプラグインが大文字で記述されると更新が空振りする [#v8deecab]

-ページ: BugTrack
-投稿者: [[にぶんのに]]
-優先順位: 低
-状態: CVS待ち
-状態: 保留
-カテゴリー: プラグイン
-投稿日: 2004-09-24 (金) 01:08:06
-バージョン: 1.4

**メッセージ [#nb85cb61]
from [[official:質問箱/99]]
~ページを更新用のフォームを提供するブロック型プラグインを大文字で記述した場合、登録した内容がページに反映されず、"ページが更新しました"と表示される。~
※ たとえば #article ではなく、#ARTICLE と書くと発生する

~該当の現象が発生するプラグインは、artice, memo, comment, insert, paint, pcomment, vote が見つかっている。

~原因はプラグイン内のロジックでプラグインが大文字で記述されるケースを想定していないため。~
ページを更新するプラグインでは、ページ内に同一プラグインが複数設置された場合に正しい位置を更新できるよう、更新時にページを再読み込みして、プラグインの記述箇所を探し出す。このとき、小文字で記述されている事を前提としているため、大文字で記述されていると、記述箇所の探索に失敗して更新が空振りする事が原因と思われる。

~なお、PukiWiki1.3.8では大文字で記述する事を許さないため、1.4への移行時に、大文字での記述を許可するよう仕様が変更されたと思われる。

----
-対象はプラグインの一覧から怪しそうな奴をピックアップして挙げただけなので、他にも類似があるかもしれません。原因への言及は類推を多く含みます。 -- [[にぶんのに]] &new{2004-09-24 (金) 01:12:42};
-[[BugTrack/268]] --  &new{2004-09-24 (金) 09:04:03};
-対象となる標準プラグインと問題の行はarticle(107行目)、comment(73行目)、insert(36行目)、memo(29行目)、paint(246行目)、pcomment(360行目)、vote(21行目)です。 -- [[Ratbeta]] &new{2004-09-24 (金) 14:59:29};
--メッセージの方の現象が発生するプラグインに paint,pcomment が抜けていたので追記しました。
-修正にはi修飾子を付加するだけでよさそうです。 -- [[Ratbeta]] &new{2004-09-24 (金) 15:01:00};
-また、edit(49,86行目)、template(22行目)、tracker(88行目)で判定漏れが発生するようです。私にはこの判定自体意味があるのか分かりませんけど…。 -- [[Ratbeta]] &new{2004-09-24 (金) 15:03:18};
--freezeに関しては凍結判定用のis_freezeが小文字での記述しか許しておらず、freezeのconvertでも処理は行っていないため、この3つに関しては結果オーライになっている模様です。&br;放置してもOKと思いますが、記述/対応方法を揃えるという方向性もあると思います -- [[にぶんのに]] &new{2004-09-24 (金) 23:31:44};
--蛇足ながらedit、template、trackerの処理について説明すると、凍結されたページ=#freezeが記述されたページなので、editのロジックはfreezeのアクションプラグイン経由で記述されるべき#freezeが、編集時に記述されないため。template、trackerのロジックはいたずら防止の為凍結されたページをテンプレートにする際、凍結されっぱなしだと使えないので、それを解除するロジックですね。 -- [[にぶんのに]] &new{2004-09-24 (金) 23:31:44};
-お疲れ様です :) 少なくともGETおよびPOSTで入力されるプラグインの名前については、小文字でないと受け付けない仕様になっています。init.phpでそのようにフィルタを追加しましたし、元を正せば実際のプラグインファイルが小文字で統一されており、さらに遡ると「タイピングのしやすさ」などからそのようにしたいというような欲求がきっとあるのでしょう。 -- [[henoheno]] &new{2004-09-25 (土) 23:12:59};
-ということで、小文字決め打ち(というより、プラグイン名はユニークなidとして使われているので、決められたとおりに固定)としないと困ってしまうのですが、その前になぜ大文字で書きたかったかをお聞きしてみたいところです -- [[henoheno]] &new{2004-09-25 (土) 23:23:58};

 plugin.php
  $name = strtolower($name);      // 大文字と小文字を区別しないファイルシステム対策
-原因のひとつはplugin.phpの上記のあたりではないかと思います -- [[henoheno]] &new{2004-09-25 (土) 23:30:29};
-もう一つは、レンダリングエンジンのどこかで #MEMO と #memo を同一視している(プラグインだと認識しているが、小文字かどうかといったチェックをしていない)部分だと思います。うーんこちらは直すのは難しいかな? (^^; -- [[henoheno]] &new{2004-09-25 (土) 23:32:57};
-大文字を小文字にして保存するように対策した方が簡単ではないでしょうか。全てを大文字/小文字対応するのは、ちと手間がかかるかと・・・ -- [[teanan]] &new{2004-09-26 (日) 03:14:19};
-[[BugTrack/705]] --  &new{2004-09-29 (水) 00:17:46};
-すいません、想像力が無い人なので「大文字を小文字にして保存」の部分のイメージをもう少し教えて下さい (^^; -- [[henoheno]] &new{2004-09-29 (水) 21:37:37};
--いつも舌足らずですみません (^^; 例えば、page_writeで #HogeHoge を #hogehogeに変換して保存しては、ということです。 -- [[teanan]] &new{2004-09-29 (水) 22:54:17};
-フォローありがとうございます (^^; まさに書き込む部分に特化した話ということで了解しました。 -- [[henoheno]] &new{2004-09-29 (水) 22:56:39};

-- [[cvs:plugin/article.inc.php]] (v1.4:1.20)
-- [[cvs:plugin/comment.inc.php]] (v1.4:1.24)
-- [[cvs:plugin/insert.inc.php]] (v1.4:1.11)
-- [[cvs:plugin/memo.inc.php]] (v1.4:1.12)
-- [[cvs:plugin/paint.inc.php]] (v1.4:1.16)
-- [[cvs:plugin/pcomment.inc.php]] (v1.4:1.33)
-- [[cvs:plugin/vote.inc.php]] (v1.4:1.18)
-各プラグインについて、[[Ratbeta]]さんの言われるところのi (case-insensitive) フラグを追加しました。これで更新可能になるはずです(更新時には、プラグイン名は強制的に小文字に変換されるでしょう)。 -- [[henoheno]] &new{2004-10-09 (土) 17:06:25};
-- [[cvs:plugin/edit.inc.php]] (v1.4:1.17)
-- [[cvs:plugin/template.inc.php]] (v1.4:1.18)
-- [[cvs:plugin/tracker.inc.php]] (v1.4:1.23)
-#freezeについても同様にしておきました :) -- [[henoheno]] &new{2004-10-09 (土) 17:27:58};
-しばらくして or どなたかが試して、問題ない様だったら完了にしましょう。 -- [[henoheno]] &new{2004-10-09 (土) 19:02:17};
-上記プラグインのいくつかで判定漏れが発生します。判定漏れは"#commentA"などの記述がされた行が"#comment"の前にあった場合に、"#commentA"の行の前にコメントを追加してしまう、というものです。"#commentA"というプラグインが有った場合にも勿論発生する為、注意が必要です。これを回避するには判定を従来の"/^#comment/i"から"/^#comment$/im"に変更する必要が有ります。ちなみに、#freeze判定で用いられている\s*に関しては、正常に動作しないため不要と思われますので、削除してもよいと思われます。 -- [[Ratbeta]] &new{2004-10-18 (月) 19:18:21};
-ブロック型プラグインで、括弧の閉じ忘れ(例えば"#pcomment(コメント,"など)や括弧の後ろに不適当な文字があった場合にもプラグインを認識してしまいます。convert_html.phpの135行目の正規表現を
 /^\#([^\(]+)(?:\((.*)\))?$/m"
とすることで回避できるようです。もう一件くらいありそうですね…(--; -- [[Ratbeta]] &new{2004-10-18 (月) 19:56:59};

//#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.045 sec.

OSDN