Fixing env('HTTP_BASE') for site domain names that have the form

xxx.yyy.zzz and use second level TLDs.
This commit is contained in:
Ber Clausen 2011-01-09 17:43:41 -03:00
parent 4c3337598e
commit 8d15ba5037
2 changed files with 34 additions and 9 deletions

View file

@ -446,7 +446,7 @@ if (!function_exists('array_combine')) {
if (defined('SERVER_IIS') && SERVER_IIS === true) {
return str_replace('\\\\', '\\', env('PATH_TRANSLATED'));
}
break;
break;
case 'DOCUMENT_ROOT':
$name = env('SCRIPT_NAME');
$filename = env('SCRIPT_FILENAME');
@ -455,20 +455,27 @@ if (!function_exists('array_combine')) {
$offset = 4;
}
return substr($filename, 0, strlen($filename) - (strlen($name) + $offset));
break;
break;
case 'PHP_SELF':
return str_replace(env('DOCUMENT_ROOT'), '', env('SCRIPT_FILENAME'));
break;
break;
case 'CGI_MODE':
return (PHP_SAPI === 'cgi');
break;
break;
case 'HTTP_BASE':
$host = env('HTTP_HOST');
if (substr_count($host, '.') !== 1) {
return preg_replace('/^([^.])*/i', null, env('HTTP_HOST'));
$count = substr_count($host, '.');
if ($count <= 1) {
return '.' . $host;
} elseif ($count === 2) {
$gTLD = array('aero', 'asia', 'biz', 'cat', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'tel', 'travel', 'xxx');
$domainName = explode('.', $host);
if (in_array($domainName[1], $gTLD)) {
$host = '.' . $host;
}
}
return '.' . $host;
break;
return preg_replace('/^([^.])*/i', null, $host);
break;
}
return null;
}

View file

@ -96,7 +96,13 @@ class BasicsTest extends CakeTestCase {
$__ENV = $_ENV;
$_SERVER['HTTP_HOST'] = 'localhost';
$this->assertEqual(env('HTTP_BASE'), '');
$this->assertEqual(env('HTTP_BASE'), '.localhost');
$_SERVER['HTTP_HOST'] = 'com.ar';
$this->assertEqual(env('HTTP_BASE'), '.com.ar');
$_SERVER['HTTP_HOST'] = 'example.ar';
$this->assertEqual(env('HTTP_BASE'), '.example.ar');
$_SERVER['HTTP_HOST'] = 'example.com';
$this->assertEqual(env('HTTP_BASE'), '.example.com');
@ -107,9 +113,21 @@ class BasicsTest extends CakeTestCase {
$_SERVER['HTTP_HOST'] = 'subdomain.example.com';
$this->assertEqual(env('HTTP_BASE'), '.example.com');
$_SERVER['HTTP_HOST'] = 'example.com.ar';
$this->assertEqual(env('HTTP_BASE'), '.example.com.ar');
$_SERVER['HTTP_HOST'] = 'www.example.com.ar';
$this->assertEqual(env('HTTP_BASE'), '.example.com.ar');
$_SERVER['HTTP_HOST'] = 'subdomain.example.com.ar';
$this->assertEqual(env('HTTP_BASE'), '.example.com.ar');
$_SERVER['HTTP_HOST'] = 'double.subdomain.example.com';
$this->assertEqual(env('HTTP_BASE'), '.subdomain.example.com');
$_SERVER['HTTP_HOST'] = 'double.subdomain.example.com.ar';
$this->assertEqual(env('HTTP_BASE'), '.subdomain.example.com.ar');
$_SERVER = $_ENV = array();
$_SERVER['SCRIPT_NAME'] = '/a/test/test.php';