Skip to content

Commit

Permalink
Fixing env('HTTP_BASE') for site domain names that have the form
Browse files Browse the repository at this point in the history
xxx.yyy.zzz and use second level TLDs.
  • Loading branch information
bar committed Jan 9, 2011
1 parent 4c33375 commit 8d15ba5
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 9 deletions.
23 changes: 15 additions & 8 deletions cake/basics.php
Expand Up @@ -446,7 +446,7 @@ function env($key) {
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');
Expand All @@ -455,20 +455,27 @@ function env($key) {
$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;
}
Expand Down
20 changes: 19 additions & 1 deletion cake/tests/cases/basics.test.php
Expand Up @@ -96,7 +96,13 @@ function testEnv() {
$__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');
Expand All @@ -107,9 +113,21 @@ function testEnv() {
$_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';
Expand Down

0 comments on commit 8d15ba5

Please sign in to comment.