相対/絶対 URI について($script, get_script_uri, get_base_uri等)

関連

メッセージ

cvs:lib/func.phpで、get_script_uri()は

// Get absolute-URI of this script

とコメントがあるように、絶対URIを出力するための関数と思われます。 get_script_uri()をgrepしてみましたが、24ファイルほどヒットしました。ほとんど下名*1は使ったことのないプラグインだったのでよくわかりませんが、ほとんどがこの関数をつかわず相対URIの扱いで構わない気がしますが、いかがでしょうか。

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

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

現状の修正案

求められている状態

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

絶対URI (absolute URI)

http://example.com/
http://example.com/path?query=value

など、相対 URI に加えてスキーム、ホスト名、ポート番号を含んだ完全な URI。

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

絶対パスによる相対URI (absolute-path reference)

/path?query#fragment
/path/file?query#fragment

必ず / で始まる

相対パスによる相対URI (relative-path reference)

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

求められている状態のコメント



コメント

コメント: 従来までの推移

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

コメント



名無しさんのまとめ案

叩き台。関数名、仕様も決めてみます。

とりあえずの対応をする場合

その後ちくちく変更していく。 絶対URIが必須な自作プラグインなどは、

$script = function_exists('init_script_full_uri') ? get_script_uri('full') : get_script_uri();

のように対応していってもらう。

パッチ

関数設置パッチ。

diff -ru pukiwiki.orig/lib/func.php pukiwiki.path-reference/lib/func.php
--- pukiwiki.orig/lib/func.php	2008-01-08 08:50:30.656250000 -0500
+++ pukiwiki.path-reference/lib/func.php	2008-01-08 10:06:47.437500000 -0500
@@ -709,8 +709,54 @@
 	}
 }
 
-// Get absolute-URI of this script
-function get_script_uri($init_uri = '')
+// Get Page URI (would be modified to use mod_rewrite, PATH_INFO)
+function get_page_uri($page, $path_reference = '')
+{
+	$script = get_script_uri($path_reference);
+	$pageuri = $script . '?' . rawurlencode($page);
+	return $pageuri;
+}
+
+// Get PukiWiki base URI (no index.php)
+function get_pkwk_baseuri($path_reference = '')
+{
+	$script = get_script_uri($path_reference);
+	if (($pos = strrpos($script, '/')) !== FALSE) {
+		$baseuri = substr($script, 0, $pos + 1);
+	}
+	return $baseuri;
+}
+
+// Get script URI
+function get_script_uri($path_reference = '')
+{
+	static $script_full, $script_abs, $script_rel;
+	global $script_path_reference;
+	$path_reference = ($path_reference !== '') ? $path_reference :
+		(isset($script_path_reference) ? $script_path_reference : 'full');
+	switch ($path_reference) {
+	case 'rel':
+		if (isset($script_rel)) return $script_rel;
+		$script_rel = '';
+		return $script_rel;
+		break;
+	case 'abs':
+		if (isset($script_abs)) return $script_abs;
+		$script = init_script_full_uri();
+		$parsed = parse_url($script);
+		$script_abs = $parsed['path'];
+		return $script_abs;
+		break;
+	default: // case 'full':
+		if (isset($script_full)) return $script_full;
+		$script_full = init_script_full_uri();
+		return $script_full;
+		break;
+	}
+}
+
+// Init absolute-URI of this script and return it (old get_script_uri)
+function init_script_full_uri($init_uri = '')
 {
 	global $script_directory_index;
 	static $script;
diff -ru pukiwiki.orig/lib/init.php pukiwiki.path-reference/lib/init.php
--- pukiwiki.orig/lib/init.php	2008-01-08 08:50:30.671875000 -0500
+++ pukiwiki.path-reference/lib/init.php	2008-01-08 09:43:50.828125000 -0500
@@ -129,9 +129,10 @@
 // INI_FILE: Init $script
 
 if (isset($script)) {
-	get_script_uri($script); // Init manually
+	init_script_full_uri($script); // Init manually
 } else {
-	$script = get_script_uri(); // Init automatically
+	$script = init_script_full_uri(); // Init automatically
+	// Set $script to support old versions
 }
 
 /////////////////////////////////////////////////
diff -ru pukiwiki.orig/pukiwiki.ini.php pukiwiki.path-reference/pukiwiki.ini.php
--- pukiwiki.orig/pukiwiki.ini.php	2008-01-08 08:50:24.937500000 -0500
+++ pukiwiki.path-reference/pukiwiki.ini.php	2008-01-08 10:00:06.843750000 -0500
@@ -118,6 +118,10 @@
 // Shorten $script: Cut its file name (default: not cut)
 //$script_directory_index = 'index.php';
 
+// Use absolute (full) uri or absolute path-reference or relative path-reference for internal links
+// Experimental function [[dev:BugTrack2/213]]
+//$script_path_reference = 'rel'; // 'full' or 'abs' or 'rel'
+
 // Site admin's name (CHANGE THIS)
 $modifier = 'anonymous';

コメント


案C by umorigu

互換性

実装

コメント



*1 自分をへりくだって言う言葉。goo辞書

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-04 (月) 03:06:46
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.364 sec.

SourceForge