From 204b27c8e0c1bcfa6810ee45bd12fda3f5d83960 Mon Sep 17 00:00:00 2001 From: Michael Hamann <michael@content-space.de> Date: Sun, 16 Jan 2011 22:23:54 +0100 Subject: [PATCH] Fix getBaseURL for literal IPv6 addresses in URLs (RFC 2732) + test case --- _test/cases/inc/init_getbaseurl.test.php | 25 ++++++++++++++++++++++++ inc/init.php | 13 ++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/_test/cases/inc/init_getbaseurl.test.php b/_test/cases/inc/init_getbaseurl.test.php index d9c76801f..a22172feb 100644 --- a/_test/cases/inc/init_getbaseurl.test.php +++ b/_test/cases/inc/init_getbaseurl.test.php @@ -275,6 +275,31 @@ class init_getBaseURL_test extends UnitTestCase { $this->assertEqual(getBaseURL(true),$correct_result); } } + + /** + * Absolute URL with IPv6 domain name. + * lighttpd, fastcgi + * + * data provided by Michael Hamann <michael@content-space.de> + */ + function test12() { + global $conf; + $conf['basedir'] = ''; + $conf['baseurl'] = ''; + $conf['canonical'] = 0; + + $_SERVER['DOCUMENT_ROOT'] = '/srv/http/'; + $_SERVER['HTTP_HOST'] = '[fd00::6592:39ed:a2ed:2c78]'; + $_SERVER['SCRIPT_FILENAME'] = '/srv/http/~michitux/dokuwiki/doku.php'; + $_SERVER['REQUEST_URI'] = '/~michitux/dokuwiki/doku.php?do=debug'; + $_SERVER['SCRIPT_NAME'] = '/~michitux/dokuwiki/doku.php'; + $_SERVER['PATH_INFO'] = null; + $_SERVER['PATH_TRANSLATED'] = null; + $_SERVER['PHP_SELF'] = '/~michitux/dokuwiki/doku.php'; + $_SERVER['SERVER_PORT'] = '80'; + $_SERVER['SERVER_NAME'] = '[fd00'; + $this->assertEqual(getBaseURL(true), 'http://[fd00::6592:39ed:a2ed:2c78]/~michitux/dokuwiki/'); + } } //Setup VIM: ex: et ts=2 : diff --git a/inc/init.php b/inc/init.php index 3b438f15b..6f4ba1ca9 100644 --- a/inc/init.php +++ b/inc/init.php @@ -420,9 +420,13 @@ function getBaseURL($abs=null){ //split hostheader into host and port if(isset($_SERVER['HTTP_HOST'])){ - list($host,$port) = explode(':',$_SERVER['HTTP_HOST']); + $parsed_host = parse_url('http://'.$_SERVER['HTTP_HOST']); + $host = $parsed_host['host']; + $port = $parsed_host['port']; }elseif(isset($_SERVER['SERVER_NAME'])){ - list($host,$port) = explode(':',$_SERVER['SERVER_NAME']); + $parsed_host = parse_url('http://'.$_SERVER['SERVER_NAME']); + $host = $parsed_host['host']; + $port = $parsed_host['port']; }else{ $host = php_uname('n'); $port = ''; @@ -431,6 +435,11 @@ function getBaseURL($abs=null){ if(!$port && isset($_SERVER['SERVER_PORT'])) { $port = $_SERVER['SERVER_PORT']; } + + if(is_null($port)){ + $port = ''; + } + if(!is_ssl()){ $proto = 'http://'; if ($port == '80') { -- GitLab