解説

ソース

lib/func.phpのget_script_uriを以下のようにしてみました。

// Get absolute-URI of this script
// Arguments
// cut ... return absolute-URI. If $script_directory_index is set, cut the last $script_directory_index from $script.
//				or cut string after the last "/".
// rel ... return relative path. If $script_directory_index is set, return '' or return string after the last "/" of script path.
// rel_cut ... return ''
// others ... return absolute-URI.
function get_script_uri($uri_mode = '', $init_uri = '')
{
	global $script_directory_index;
	static $script, $script_relative, $script_cut;

	if ($init_uri == '') {
		 // Get
		 if (isset($script))
		 {
			  switch ($uri_mode) {
			  case 'rel':
				   return $script_relative;
				   break;
			  case 'cut':
				   return $script_cut;
				   break;
			  case 'rel_cut':
				   return '';
				   break;
			  default :
				   return $script;
				   break;
			  }
		 }

		 // Set automatically
		 $msg     = 'get_script_uri() failed: Please set $script at INI_FILE manually';

		 $script  = (SERVER_PORT == 443 ? 'https://' : 'http://'); // scheme
//		$script .= SERVER_NAME;	// host
		 if (isset($_SERVER['HTTP_HOST']))
		 {
			  $script .= $_SERVER['HTTP_HOST'];	// host
		 } else
		 {
			  $script .= SERVER_NAME;	// host
		 }
		 $script .= (SERVER_PORT == 80 ? '' : ':' . SERVER_PORT);  // port

		 // SCRIPT_NAME が'/'で始まっていない場合(cgiなど) REQUEST_URIを使ってみる
		 $path    = SCRIPT_NAME;
		 if ($path{0} != '/') {
			  if (! isset($_SERVER['REQUEST_URI']) || $_SERVER['REQUEST_URI']{0} != '/')
				   die_message($msg);

			  // REQUEST_URIをパースし、path部分だけを取り出す
			  $parse_url = parse_url($script . $_SERVER['REQUEST_URI']);
			  if (! isset($parse_url['path']) || $parse_url['path']{0} != '/')
				   die_message($msg);

			  $path = $parse_url['path'];
		 }
		 $script .= $path;

		 if (! is_url($script, TRUE) && php_sapi_name() == 'cgi')
			  die_message($msg);
		 unset($msg);

	} else {
		 // Set manually
		 if (isset($script)) die_message('$script: Already init');
		 if (! is_url($init_uri, TRUE)) die_message('$script: Invalid URI');
		 $script = $init_uri;
	}

	// Cut filename or not
	if (isset($script_directory_index)) {
		 if (! file_exists($script_directory_index))
			  die_message('Directory index file not found: ' .
						  htmlspecialchars($script_directory_index));
	}
	$matches = array();
	if (isset($script_directory_index)) {
		 if (preg_match('#^(.+/)' . preg_quote($script_directory_index, '#') . '$#',
						$script, $matches)) 
		 {
			  $script_cut = $matches[1];
			  $script_relative = '';
			  $script = $script_cut;
		 }
	} else {
		 if (preg_match('#^(.*)/(.[^/]*)$#',
						$script, $matches)) 
		 {
			  $script_cut = $matches[1] . '/';
			  $script_relative = $matches[2];
		 }
	}

	switch ($uri_mode) {
	case 'rel':
		 return $script_relative;
		 break;
	case 'cut':
		 return $script_cut;
		 break;
	case 'rel_cut':
		 return '';
		 break;
	default :
		 return $script;
		 break;
	}
}

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-01-08 (火) 10:41:20
Site admin: PukiWiki Development Team

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

SourceForge