* 相対/絶対 URI について($script、get_script_uri等) [#ge7ad818]

- ページ: [[BugTrack2]]
- 投稿者: [[ぃぉぃぉ]]
- 優先順位: 普通
- 状態: 提案
- カテゴリー: その他
- 投稿日: 2007-03-08 (木) 20:37:49
- バージョン: 


#contents

** 関連 [#u4243420]
- [[BugTrack2/101]] サイト内のページへのリンクにもhost名を含む完全なuriが使われている
- [[BugTrack2/124]] 他のポートでのhttps使用

** メッセージ [#ff7b6db9]

[[cvs:lib/func.php]]で、get_script_uri()は
 // Get absolute-URI of this script
とコメントがあるように、絶対URIを出力するための関数と思われます。
get_script_uri()をgrepしてみましたが、24ファイルほどヒットしました。ほとんど下名(??? <- この意味を教えて下さい)は使ったことのないプラグインだったのでよくわかりませんが、ほとんどがこの関数をつかわず相対URIの扱いで構わない気がしますが、いかがでしょうか。

~これらの修正を行って動作確認でもして、変更箇所を示したらofficialに採用される可能性はあるでしょうか?それならやろうかなと思うのですが。

もともと相対URIで使用したかったのは、当方の環境ではDeleGateを使用してSSL化しているため、Webサーバーから見ると常に平文通信のため、リンクが全てhttpsにならずにhttpになってしまったのです。
で、相対URIならいけるかな、と。試しにget_script_uriで$script=''を返すようにしましたが、それなりに動きました。

*** 現状の修正案 [#m2fe00a8]
#ls2


** 求められている状態 [#n450c028]


それぞれ、DirectoryIndex(例えばindex.php)を削ったものと、削っていないものとがありうる (他にも条件があるかもしれない)

*** 絶対URI (absolute URI) [#j61eb657]

 http://example.com/
 http://example.com/path?query=value
など、相対 URI に加えてスキーム、ホスト名、ポート番号を含んだ完全な URI。


相対URIにすると正常な動作を妨げるものがある

-RSS出力 -- 絶対URIでないと、購読者がリンクにたどり着けない。
- 自分自身のURIをコンテンツの中に表示させる場合 -- 例: NAVIBARのTOPICPATH'''非'''使用時(pukiwiki.skin.php)
-HTTP Location ヘッダで使用するURI -- http://www.studyinghttp.net/header#Location
-リンクは絶対URIと同様の働きをする。
-$link['reload']の出力が変わっている、ということは、get_script_uriをgrepしただけでは全ての影響箇所を見つけられていない。 --  [[ぃぉぃぉ]]

- 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};
--- このコメントは逆の事を言われているように思います。デフォルトでは index.php つきのURI が得られます。関数の中では、管理者の設定に応じて index.php といったファイル名を ''削る'' 処理を行っています。 -- [[henoheno]] &new{2007-03-11 (日) 21:12:21};
--- そうでしたか。確認はしていなかったので。とにかく、ディレクトリURLを直接返すAPI関数が欲しいかな、と。 --  &new{2007-03-12 (月) 07:16:45};

#comment



*** サイト内絶対パスを利用したURI (absolute-path reference) [#te9bbb8d]
 /path?query#fragment
 /path/file?query#fragment

必ず ''/'' で始まる


#comment

*** 相対URI (relative-path reference)[#x86983c0]

 ./path/file
 ../path/file?query

- 絶対URIに比べ転送量が小さい
- %%get_script_uri()を呼ばずにすむ(空の文字列に置き換えればよい)ので速度も上がる%% 相対URIを使うかどうかと、どのようにして実現するかは別の話です -- [[henoheno]]

----
- 相対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};

- ./ におきかえようとしているようですが、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};

- 指摘があったようにindex.phpの省略/非省略がありうるので、定数'./'に置き換えは無理ですね。 -- [[ぃぉぃぉ]] &new{2007-03-11 (日) 15:45:42};

#comment

--------
** コメント [#i542f783]

*** コメント: 従来までの推移 [#hb0abc89]
- お疲れ様です。細かく拝見していませんが・・・相対パスであってはならない局面があるのに今まではそれが安易に扱われていたため、(最初のステップとして)絶対パスを定義しなければ動かない様にした、という経緯で正しいです。次のステップとしては、複数のタイプを使い分けるようなスマートな解決策が求められています。「サイト自身の位置」という一つの情報は一箇所で管理しないとコードが増えますから、get_script_uri()を拡張・・・というか引数をを作り変えて、これに与える引数によって複数のタイプを選択できるようにすると楽なのだろうと思います。 -- [[henoheno]] &new{2007-03-11 (日) 00:25:42};

-そもそもget_script_uri()を呼んでいるのがおかしいですよね。$scriptがあるのだから。 -- [[ぃぉぃぉ]] &new{2007-03-11 (日) 15:43:56};
-- get_script_uri() と $scriptの関係を補足します。$scriptは互換性のためにだけ残されています。get_script_uri() があるのにグローバル変数 $script を参照しているのはおかしい、というのが現状です。 -- [[henoheno]] &new{2007-03-11 (日) 20:57:15};



*** コメント: 実現方法 (グローバル変数か関数か) [#vd021d1d]


-以下の仕様でいかがでしょ。 -- [[ぃぉぃぉ]] &new{2007-03-11 (日) 15:43:56};
++ $script_rel(相対URI)、$script_abs(絶対URI)をlib/init.phpで設定。 -- [[ぃぉぃぉ]] &new{2007-03-11 (日) 15:45:42};
++ 現状の$script、init.php以外で呼んでいるget_script_uri()を$script_relもしくは$script_absに置き換える。 -- [[ぃぉぃぉ]] &new{2007-03-11 (日) 15:46:58};

- 互換性を考慮した場合、グローバル変数 $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};
-- ニーズとして求められているURIは二つではないので、その方向だとグローバル変数がさらに要るか、場面場面で別の加工をする必要があるでしょう。 -- [[henoheno]] &new{2007-03-11 (日) 21:01:34};
-- セキュリティ、およびメンテナンスの観点から、グローバル変数をむやみに増やすべきではないという点と、重要な情報をグローバル変数に収める(改変される可能性を作る)べきでないという点と、場面ごとにバラバラなコードがあちこちに発散してしまうため、メンテナンスコストが増えてミスが起こり易くなるという点もコメントしておきますね -- [[henoheno]] &new{2007-03-11 (日) 21:05:55};
-- クラスで作るのはどうか、といった話題もあると思います。PHP4なので以下略。 -- [[henoheno]] &new{2007-03-11 (日) 21:07:52};
- [[ぃぉぃぉ]]さんも「やっぱり関数を呼ぶか式を入れるかが必要になるんですね」などとコメントされている通りなのですが、この件のポイントは、「''ニーズが動的に変化する''」という点にあると思います。index.php付きのURIを知りたいときもあるし、いらない時もあるし、絶対URIが欲しい時もあるし、相対パスで欲しい時もありえます。また、状況に応じてそれが変化する事もあります。今までは絶対URIで統一させていたので(そのサイトからコンテンツを提供し続けるのであれば)どの場面でも大体問題なかったのですが、蓋を開けるのであれば、それぞれのリクエストに柔軟に応じてあげなければいけないだろうという事です。 -- [[henoheno]] &new{2007-03-11 (日) 21:51:26};
- グローバル変数はなしだと思います。現在の $script は get_script_uri() が呼び出されたときに自動生成されます。あと、下位互換性を考えたら get_script_uri は現状どおり絶対URIを返して、get_script_rel とか get_script_uri('rel') などが相対URIを返す、とした方が楽かもしれません。そして変えられるところをちくちく変えていく、と。 --  &new{2007-03-12 (月) 07:12:32};

#comment

*** コメント [#j92644bd]
- 絶対URL の取得に失敗して、質問箱にくる人もよくいますよね。相対パスでよいならその辺のことで質問箱にくる人は少なくなって良いかもしれません。 --  &new{2007-03-09 (金) 08:08:11};
-- 絶対パスが必要なものはそういう対応をする必要があると思います。具体的なplugin等が分かればどんどん紹介して下さい。 -- [[ぃぉぃぉ]] &new{2007-03-09 (金) 12:34:03};

- contents を追加し、関連ページのリンクを追加し、とても大雑把に話題をまとめさせていただいています。すごく乱暴ですいません・・・ -- [[henoheno]] &new{2007-03-11 (日) 20:18:47};

#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.077 sec.

OSDN