// Init server variablesでHTTP_HOSTも取得した方がよいかな。
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; } }
*** init.php Fri Apr 20 02:25:08 2007 --- init.php.org Fri Apr 20 02:24:57 2007 *************** *** 126,132 **** // INI_FILE: Init $script if (isset($script)) { ! get_script_uri('', $script); // Init manually } else { $script = get_script_uri(); // Init automatically } --- 126,132 ---- // INI_FILE: Init $script if (isset($script)) { ! get_script_uri($script); // Init manually } else { $script = get_script_uri(); // Init automatically }