Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Fix for env('HTTP_BASE') #23

Closed
wants to merge 1 commit into from

1 participant

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jan 9, 2011
  1. @bar

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

    bar authored
    xxx.yyy.zzz and use second level TLDs.
This page is out of date. Refresh to see the latest.
Showing with 34 additions and 9 deletions.
  1. +15 −8 cake/basics.php
  2. +19 −1 cake/tests/cases/basics.test.php
View
23 cake/basics.php
@@ -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');
@@ -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;
}
View
20 cake/tests/cases/basics.test.php
@@ -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');
@@ -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';
Something went wrong with that request. Please try again.