Extends
lithium\net\http\Request
Queries PHP's environment settings, and provides an abstraction for standardizing expected
environment values across varying platforms, as well as specify custom environment flags.
Parameters
- string $key The environment variable required.
Returns
string The requested variables value.Source
public function env($key) {
if (strtolower($key) == 'base') {
return $this->_base;
}
if ($key == 'SCRIPT_NAME' && !isset($this->_env['SCRIPT_NAME'])) {
if ($this->_env['PLATFORM'] == 'CGI' || isset($this->_env['SCRIPT_URL'])) {
$key = 'SCRIPT_URL';
}
}
$val = array_key_exists($key, $this->_env) ? $this->_env[$key] : getenv($key);
$this->_env[$key] = $val;
if ($key == 'REMOTE_ADDR') {
foreach (array('HTTP_X_FORWARDED_FOR', 'HTTP_PC_REMOTE_ADDR') as $altKey) {
if ($addr = $this->env($altKey)) {
$val = $addr;
break;
}
}
}
if ($val !== null && $val !== false && $key !== 'HTTPS') {
return $val;
}
switch ($key) {
case 'HTTPS':
if (isset($this->_env['SCRIPT_URI'])) {
return (strpos($this->_env['SCRIPT_URI'], 'https://') === 0);
}
if (isset($this->_env['HTTPS'])) {
return (!empty($this->_env['HTTPS']) && $this->_env['HTTPS'] !== 'off');
}
return false;
case 'SERVER_ADDR':
if (empty($this->_env['SERVER_ADDR']) && !empty($this->_env['LOCAL_ADDR'])) {
return $this->_env['LOCAL_ADDR'];
}
return $this->_env['SERVER_ADDR'];
case 'SCRIPT_FILENAME':
if ($this->_env['PLATFORM'] == 'IIS') {
return str_replace('\\\\', '\\', $this->env('PATH_TRANSLATED'));
}
return $this->env('DOCUMENT_ROOT') . $this->env('PHP_SELF');
case 'DOCUMENT_ROOT':
$fileName = $this->env('SCRIPT_FILENAME');
$offset = (!strpos($this->env('SCRIPT_NAME'), '.php')) ? 4 : 0;
$offset = strlen($fileName) - (strlen($this->env('SCRIPT_NAME')) + $offset);
return substr($fileName, 0, $offset);
case 'PHP_SELF':
return str_replace('\\', '/', str_replace(
$this->env('DOCUMENT_ROOT'), '', $this->env('SCRIPT_FILENAME')
));
case 'CGI':
case 'CGI_MODE':
return ($this->_env['PLATFORM'] == 'CGI');
case 'HTTP_BASE':
return preg_replace('/^([^.])*/i', null, $this->_env['HTTP_HOST']);
}
}