/** * Returns HTTP-relevant environment (server) information. * * @param string $var One of 'ssl', 'host', 'domain', or 'protocol'. * @return mixed 'ssl' returns boolean; the rest return a string. */ function http_env($var) { switch (strtolower($var)) { case 'ssl': static $ssl; if (!isset($ssl)) { if ($https = getenv('https')) { $ssl = 'on' === strtolower($https) || 1 == $https; } else { if ('https' === getenv('http_x_forwarded_proto') || 443 == getenv('server_port')) { $ssl = true; } else { $ssl = false; } } } return $ssl; case 'host': static $host; if (!isset($host)) { $host = rtrim(getenv('http_host'), '/\\') . rtrim(dirname(getenv('script_name')), '/\\'); } return $host; case 'domain': static $domain; if (!isset($domain)) { $domain = 'http' . (http_env('ssl') ? 's' : '') . '://' . ltrim(http_env('host'), '/'); } return $domain; case 'protocol': return http_env('ssl') ? 'https' : 'http'; default: trigger_error("Invalid HTTP env variable '{$var}'."); return null; } }
/** * If given array of cookie parameters, sets cookie parameters. */ public function __construct(array $cookieparams = array()) { ini_set('session.use_cookies', 1); $this->cookie_params = array_replace(array('lifetime' => 86400 * 7, 'path' => '/', 'domain' => '.' . http_env('host'), 'secure' => false, 'httponly' => false), $cookieparams); }
/** * Takes an associative array in the layout of parse_url, and constructs a URL * from it. * * @author FuelPHP * @see http://www.php.net/manual/en/function.http-build-url.php * * @param mixed (Part(s) of) an URL in form of a string or associative array like * parse_url() returns * @param mixed Same as the first argument * @param int A bitmask of binary or'ed HTTP_URL constants (Optional) * HTTP_URL_REPLACE is the default * @param array If set, it will be filled with the parts of the composed url like * parse_url() would return * @return string constructed URL */ function http_build_url($url, $parts = array(), $flags = HTTP_URL_REPLACE, &$new_url = false) { $keys = array('user', 'pass', 'port', 'path', 'query', 'fragment'); if ($flags & HTTP_URL_STRIP_ALL) { // HTTP_URL_STRIP_ALL becomes all the HTTP_URL_STRIP_Xs $flags |= HTTP_URL_STRIP_USER; $flags |= HTTP_URL_STRIP_PASS; $flags |= HTTP_URL_STRIP_PORT; $flags |= HTTP_URL_STRIP_PATH; $flags |= HTTP_URL_STRIP_QUERY; $flags |= HTTP_URL_STRIP_FRAGMENT; } else { if ($flags & HTTP_URL_STRIP_AUTH) { // HTTP_URL_STRIP_AUTH becomes HTTP_URL_STRIP_USER and HTTP_URL_STRIP_PASS $flags |= HTTP_URL_STRIP_USER; $flags |= HTTP_URL_STRIP_PASS; } } // parse the original URL $parsed = is_array($url) ? $url : parse_url($url); // make sure we always have a scheme, host and path if (empty($parsed['scheme'])) { static $scheme; isset($scheme) or $scheme = 'http' . (http_env('ssl') ? 's' : ''); $parsed['scheme'] = $scheme; } if (empty($parsed['host'])) { static $host; isset($host) or $host = http_env('host'); $parsed['host'] = $host; } if (!isset($parsed['path'])) { $parsed['path'] = ''; } // make the path absolute if needed if (!empty($parsed['path']) && '/' !== substr($parsed['path'], 0, 1)) { $parsed['path'] = '/' . $parsed['path']; } // scheme and host are always replaced if (isset($parts['scheme'])) { $parsed['scheme'] = $parts['scheme']; } if (isset($parts['host'])) { $parsed['host'] = $parts['host']; } // replace the original URL with it's new parts (if applicable) if ($flags & HTTP_URL_REPLACE) { foreach ($keys as $key) { if (isset($parts[$key])) { $parsed[$key] = $parts[$key]; } } } else { // join the original URL path with the new path if (isset($parts['path']) && $flags & HTTP_URL_JOIN_PATH) { if (isset($parsed['path'])) { $parsed['path'] = rtrim(str_replace(basename($parsed['path']), '', $parsed['path']), '/') . '/' . ltrim($parts['path'], '/'); } else { $parsed['path'] = $parts['path']; } } // join the original query string with the new query string if (isset($parts['query']) && $flags & HTTP_URL_JOIN_QUERY) { if (isset($parsed['query'])) { $parsed['query'] .= '&' . $parts['query']; } else { $parsed['query'] = $parts['query']; } } } // Skip this part if default flag if (HTTP_URL_REPLACE !== $flags) { // strips all the applicable sections of the URL // note: scheme and host are never stripped foreach ($keys as $key) { if ($flags & (int) constant('HTTP_URL_STRIP_' . strtoupper($key))) { unset($parsed[$key]); } } } $new_url = $parsed; $url = isset($parsed['scheme']) ? $parsed['scheme'] . '://' : ''; if (isset($parsed['user'])) { $pass = isset($parsed['pass']) ? ':' . $parsed['pass'] : ''; $url .= $parsed['user'] . $pass . '@'; } $url .= isset($parsed['host']) ? $parsed['host'] : ''; $url .= isset($parsed['port']) ? ':' . $parsed['port'] : ''; $url .= isset($parsed['path']) ? $parsed['path'] : ''; $url .= isset($parsed['query']) ? '?' . $parsed['query'] : ''; $url .= isset($parsed['fragment']) ? '#' . $parsed['fragment'] : ''; return $url; }