* 相対/絶対 URI について($script、get_script_uri等) [#ge7ad818] - ページ: [[BugTrack2]] - 投稿者: [[ぃぉぃぉ]] - 優先順位: 普通 - 状態: 提案 - カテゴリー: その他 - 投稿日: 2007-03-08 (木) 20:37:49 - バージョン: ** メッセージ [#ff7b6db9] [[cvs:lib/func.php]]で、get_script_uri()は // Get absolute-URI of this script とコメントがあるように、絶対URIを出力するための関数と思われます。 get_script_uri()をgrepしてみましたが、24ファイルほどヒットしました。ほとんど下名(???)は使ったことのないプラグインだったのでよくわかりませんが、ほとんどがこの関数をつかわず相対URIの扱いで構わない気がしますが、いかがでしょうか。 ***相対URI化のメリット [#n446710c] -転送データ量が減る -get_script_uri()を呼ばずにすむ(空の文字列に置き換えればよい)ので速度も上がる ~といったメリットが期待されます。これらの修正を行って動作確認でもして、変更箇所を示したらofficialに採用される可能性はあるでしょうか?それならやろうかなと思うのですが。 もともと相対URIで使用したかったのは、当方の環境ではDeleGateを使用してSSL化しているため、Webサーバーから見ると常に平文通信のため、リンクが全てhttpsにならずにhttpになってしまったのです。 で、相対URIならいけるかな、と。試しにget_script_uriで$script=''を返すようにしましたが、それなりに動きました。 ***相対URI化すべきでない物(絶対URIのまま使用しないといけない物) [#led2f1e6] -RSS出力 ... カレントのURLが存在しないため、相対的にはリンクにたどり着けない。 -NAVIBARのTOPICPATH'''非'''使用時(pukiwiki.skin.php)のようにアドレスを表示する場合に、相対パスしか表示されなく見た目が悪い。 --リンクは絶対URIと同様の働きをする。 --$link['reload']の出力が変わっている、ということは、get_script_uriをgrepしただけでは全ての影響箇所を見つけられていない。 -クッキーの有効パスに利用しているようなプラグイン ***相対URI化のデメリット [#r501d90b] - ありますか? ~ご意見下さいm(_ _)m -- [[ぃぉぃぉ]] &new{2007-03-08 (木) 20:37:49}; ***用語の整理 [#n450c028] ~勘違いがあるとまずいので、整理しておきました。URL にクエリが含まれることの多い PukiWiki では「~ URI」や「~ URL」が適切な用語になります。 「~パス」にクエリは含まれません。 :絶対URI|http://example.com/ http://example.com/path?query=value などの完全な URI。 :相対URI|./path ../path?query /path?query など、絶対・相対パスとクエリを含む。 :絶対パス|/path のように必ず ''/'' で始まる。 :相対パス|./path ../path path ***修正案 [#m2fe00a8] #ls2 -------- - 絶対URL の取得に失敗して、質問箱にくる人もよくいますよね。相対パスでよいならその辺のことで質問箱にくる人は少なくなって良いかもしれません。 -- &new{2007-03-09 (金) 08:08:11}; - get_script_uri() から 例えば http://pukiwiki.sourceforge.jp/dev/ のようなアドレスを取得して、クッキーの有効パスに利用しているようなプラグインもあります。 -- &new{2007-03-09 (金) 08:11:40}; -- これに対してはむしろ index.php のあるディレクトリURLを直接返す関数が欲しいです。たしか get_script_uri 内で index.php をくっつけてますよね?くっつけてから分離するというのは無駄っぽいので。 -- &new{2007-03-09 (金) 08:16:42}; -- 絶対パスが必要なものはそういう対応をする必要があると思います。具体的なplugin等が分かればどんどん紹介して下さい。 -- [[ぃぉぃぉ]] &new{2007-03-09 (金) 12:34:03}; -- 相対URIでかまわない部分はget_script_uri()を'./'に置き換えて、get_script_uri()は絶対URIを返すという仕様でどうでしょう。 -- [[ぃぉぃぉ]] &new{2007-03-10 (土) 21:42:24}; - <a href="?hoge"> は Another HTML-lint で怒られたと思います。$script = 'index.php' にしないといけないと思います。 -- &new{2007-03-09 (金) 08:21:13}; -- そうすると今度は index.php を省略した URL を使用できなくなると思います。大したことではないと思うかどうかは人によりますね。 -- &new{2007-03-09 (金) 08:21:59}; -- <a href="./?hoge">なら通りそうですた。$script = './'でok? -- [[ぃぉぃぉ]] &new{2007-03-09 (金) 09:38:33}; - 用語整理ありがとうございます。わかりやすいです。 -- [[ぃぉぃぉ]] &new{2007-03-10 (土) 21:19:17}; - お疲れ様です。細かく拝見していませんが・・・相対パスであってはならない局面があるのに今まではそれが安易に扱われていたため、(最初のステップとして)絶対パスを定義しなければ動かない様にした、という経緯で正しいです。次のステップとしては、複数のタイプを使い分けるようなスマートな解決策が求められています。「サイト自身の位置」という一つの情報は一箇所で管理しないとコードが増えますから、get_script_uri()を拡張・・・というか引数をを作り変えて、これに与える引数によって複数のタイプを選択できるようにすると楽なのだろうと思います。 -- [[henoheno]] &new{2007-03-11 (日) 00:25:42}; - HTTP Location ヘッダも絶対パスを要求したはずです。 -- [[henoheno]] &new{2007-03-11 (日) 00:26:02}; -- 絶対パスではなく絶対URLですね。 -- &new{2007-03-11 (日) 01:44:02}; - ./ におきかえようとしているようですが、index.php とは限らないし、index.php を省略できる環境とも限らないですよね。 -- &new{2007-03-11 (日) 07:02:56}; -- おーっと、そうでした。index.phpを省略できるかどうか、考慮が漏れていました。残念。やっぱり関数を呼ぶか式を入れるかが必要になるんですね。 -- [[ぃぉぃぉ]] &new{2007-03-11 (日) 10:45:00}; -- デフォルトは index.php などのスクリプト名、pukiwiki.ini.php のスクリプト名を省略する設定が有効の場合 ./ 、というようにするのが良いでしょうね。 -- &new{2007-03-11 (日) 07:05:44}; - 互換性を考慮した場合、グローバル変数 $script は(従来通り)、lib/init.php あたりで絶対URLとして正規化した後は、変更する場面があってはいけません。ただし、グローバル変数で値を持つというのは(いつ改変されるか解らないので)本来危険な設計ですから、今後の対応としては正しい値を持つ正規の関数(例えばget_script_uri()がそれを担当できる)に対して、どのような形(絶対、相対、・・・etc)で自身のURIが欲しいかを問い合わせる形にすると堅固になります。 -- [[henoheno]] &new{2007-03-11 (日) 10:16:04}; -- できれば関数を呼び出す回数を減らしたいので、$scriptを相対URI、$script_absを絶対URIとしてlib/init.phpで設定し、あとは使う側で選んでもらう、ということでどうでしょう。多少負荷軽減になりますよね? -- [[ぃぉぃぉ]] &new{2007-03-11 (日) 11:07:09}; #comment