Files
OMS/app/base/lib/component/request.php
2026-01-04 19:08:31 +08:00

925 lines
22 KiB
PHP

<?php
/**
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* @package component
* @author edwin.lzh@gmail.com 2010/4/12
*/
class base_component_request
{
/*
* app name
* @val string
*/
protected $_app = null;
/*
* app key
* @val string
*/
protected $_app_key = "app";
/*
* ctl name
* @val string
*/
protected $_ctl = null;
/*
* ctl key
* @val string
*/
protected $_ctl_key = "ctl";
/*
* act name
* @val string
*/
protected $_act = null;
/*
* act key
* @val string
*/
protected $_act_key = "act";
/*
* request params
* @val array
*/
protected $_params = array();
/*
* allow export params
* @val array
*/
protected $_ext_param_source = array("GET", "POST");
/*
* request uri
* @val string
*/
protected $_request_uri = null;
/*
* core url
* @val string
*/
protected $_core_url = null;
/*
* path info
* @val string
*/
protected $_path_info = null;
static function is_ajax(){ //我们ajax系统的统一标示符
return $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
}
/*
* class init
* @return self
*/
static function init(){
}
static function base_url(){
}
/*
* set app name
* @param string $value
* @return self
*/
public function set_app_name($value)
{
$this->_app = $value;
return $this;
}//End Function
/*
* set ctl name
* @param string $value
* @return self
*/
/**
* 设置_ctl_name
* @param mixed $value value
* @return mixed 返回操作结果
*/
public function set_ctl_name($value)
{
$this->_ctl = $value;
return $this;
}//End Function
/*
* set act name
* @param string $value
* @return self
*/
public function set_act_name($value)
{
$this->_act = $value;
return $this;
}//End Function
/*
* get ctl name
* @return string
*/
/**
* 获取_app_name
* @return mixed 返回结果
*/
public function get_app_name()
{
return $this->_app;
}//End Function
/*
* get ctl name
* @return string
*/
public function get_ctl_name()
{
return $this->_ctl;
}//End Function
/*
* get act name
* @return string
*/
/**
* 获取_act_name
* @return mixed 返回结果
*/
public function get_act_name()
{
return $this->_act;
}//End Function
/*
* get all exists param by $key
* @param string $key
* @param boolean $ext
* @param string $def
* @return self
*/
public function get_param($key, $ext=false, $def=null)
{
switch(true)
{
case isset($this->_params[$key]):
return $this->_params[$key];
case $ext:
if(in_array("GET", $this->get_ext_param_source()))
return $this->get_get($key);
case $ext:
if(in_array("POST", $this->get_ext_param_source()))
return $this->get_post($key);
case $ext:
if(in_array("COOKIE", $this->get_ext_param_source()))
return $this->get_cookie($key);
case $ext:
if(in_array("SERVER", $this->get_ext_param_source()))
return $this->get_server($key);
case $ext:
if(in_array("ENV", $this->get_ext_param_source()))
return $this->get_env($key);
default:
return $def;
}//End Switch
}//End Function
/*
* set params
* @param string $key
* @param mixed $val
* @return self
*/
/**
* 设置_param
* @param mixed $key key
* @param mixed $val val
* @return mixed 返回操作结果
*/
public function set_param($key, $val)
{
if($val==null){
return $this->del_param($key);
}
$this->_params[$key] = $val;
return $this;
}//End Function
/*
* get all params
* @param boolean $ext
* @return array
*/
public function get_params($ext=false)
{
$param = array();
switch(true)
{
case $ext:
if(in_array("GET", $this->get_ext_param_source()))
$param = $param + (array) $this->get_get();
case $ext:
if(in_array("POST", $this->get_ext_param_source()))
$param = $param + (array) $this->get_post();
case $ext:
if(in_array("COOKIE", $this->get_ext_param_source()))
$param = $param + (array) $this->get_cookie();
case $ext:
if(in_array("SERVER", $this->get_ext_param_source()))
$param = $param + (array) $this->get_server();
case $ext:
if(in_array("ENV", $this->get_ext_param_source()))
$param = $param + (array) $this->get_env();
default:
$param = $param + $this->_params;
}//End Switch
return $param;
}//End Function
/*
* set params
* @param array $arr
* @return self
*/
/**
* 设置_params
* @param mixed $arr arr
* @return mixed 返回操作结果
*/
public function set_params( $arr)
{
$this->_params = $this->_params + (array) $arr;
foreach($this->_params AS $key=>$val){
if($val == null)
$this->del_param($key);
}
return $this;
}//End Function
/*
* delete param by $key
* @param string $key
* @return self
*/
public function del_param($key)
{
if(isset($this->_params[$key]))
unset($this->_params[$key]);
return $this;
}//End Function
/*
* set ext params source
* @param array $arr
* @return self
*/
/**
* 设置_ext_param_source
* @param mixed $arr arr
* @return mixed 返回操作结果
*/
public function set_ext_param_source($arr)
{
if(is_array($arr))
$this->_ext_param_source = $arr;
return $this;
}//End Function
/*
* get ext params source
* @return array
*/
public function get_ext_param_source()
{
return (array) $this->_ext_param_source;
}//End Function
/*
* get param by $key
* @param string $key
* @return mixed
*/
/**
* 获取
* @param mixed $key key
* @return mixed 返回结果
*/
public function get($key)
{
switch(true)
{
case isset($this->_params[$key]):
return $this->_params[$key];
case isset($_GET[$key]):
return $_GET[$key];
case isset($_POST[$key]):
return $_POST[$key];
case isset($_COOKIE[$key]):
return $_COOKIE[$key];
case ($key == 'REQUEST_URI'):
return $this->get_request_uri();
case ($key == 'PATH_INFO'):
return $this->get_path_info();
case isset($_SERVER[$key]):
return $_SERVER[$key];
case isset($_ENV[$key]):
return $_ENV[$key];
default:
return null;
}//End Switch
}//End Function
/*
* exists
* @param string $key
* @return boolean
*/
public function has($key)
{
switch(true)
{
case isset($this->_params[$key]):
return true;
case isset($_GET[$key]):
return true;
case isset($_POST[$key]):
return true;
case isset($_COOKIE[$key]):
return true;
case isset($_SERVER[$key]):
return true;
case isset($_ENV[$key]):
return true;
default:
return false;
}//End Switch
}//End Function
/*
* get $_GET
* @param string $key
* @return mixed
*/
/**
* 获取_get
* @param mixed $key key
* @return mixed 返回结果
*/
public function get_get($key = null)
{
if($key === null)
return $_GET;
return $_GET[$key];
}//End Function
/*
* get $_POST
* @param string $key
* @return mixed
*/
public function get_post($key = null)
{
if($key === null)
return $_POST;
return $_POST[$key];
}//End Function
/*
* get $_COOKIE
* @param string $key
* @return mixed
*/
/**
* 获取_cookie
* @param mixed $key key
* @return mixed 返回结果
*/
public function get_cookie($key = null)
{
if($key === null)
return $_COOKIE;
return $_COOKIE[$key];
}//End Function
/*
* get $_SERVER
* @param string $key
* @return mixed
*/
public function get_server($key = null)
{
if($key === null)
return $_SERVER;
return $_SERVER[$key];
}//End Function
/*
* get $_ENV
* @param string $key
* @return mixed
*/
/**
* 获取_env
* @param mixed $key key
* @return mixed 返回结果
*/
public function get_env($key = null)
{
if($key === null)
return $_ENV;
return $_ENV[$key];
}//End Function
/*
* get request uri
* @return string
*/
public function get_request_uri()
{
if(empty($this->_request_uri))
$this->set_request_uri();
return $this->_request_uri;
}//End Function
/*
* get code url
* @return string
*/
/**
* 获取_core_url
* @return mixed 返回结果
*/
public function get_core_url()
{
if(empty($this->_core_url))
$this->set_core_url();
return $this->_core_url;
}//End Function
/*
* get path info
* @return string
*/
public function get_path_info()
{
if(empty($this->_path_info))
$this->set_path_info();
return $this->_path_info;
}//End Function
/*
* set request uri
* @param string $request_uri
* @return self
*/
/**
* 设置_request_uri
* @param mixed $request_uri request_uri
* @return mixed 返回操作结果
*/
public function set_request_uri($request_uri = null)
{
if ($request_uri === null) {
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch
$request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
} elseif (isset($_SERVER['REQUEST_URI'])) {
$request_uri = $_SERVER['REQUEST_URI'];
if (isset($_SERVER['HTTP_HOST']) && strstr($request_uri, $_SERVER['HTTP_HOST'])) {
$pathInfo = parse_url($request_uri, PHP_URL_PATH);
$queryString = parse_url($request_uri, PHP_URL_QUERY);
$request_uri = $pathInfo
. ((empty($queryString)) ? '' : '?' . $queryString);
}
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI
$request_uri = $_SERVER['ORIG_PATH_INFO'];
if (!empty($_SERVER['QUERY_STRING'])) {
$request_uri .= '?' . $_SERVER['QUERY_STRING'];
}
} else {
return $this;
}
} elseif (!is_string($request_uri)) {
return $this;
} else {
// Set GET items, if available
if (false !== ($pos = strpos($request_uri, '?'))) {
// Get key => value pairs and set $_GET
$query = substr($request_uri, $pos + 1);
parse_str($query, $vars);
$this->set_query($vars);
}
}
$this->_request_uri = $request_uri;
return $this;
}//End Function
/*
* set request uri query
* @param array $spec
* @param mixed $value
* @return self
*/
public function set_query($spec, $value=null)
{
if ((null === $value) && is_array($spec)) {
foreach ($spec as $key => $value) {
$this->set_query($key, $value);
}
return $this;
}
$_GET[(string) $spec] = $value;
return $this;
}//End Function
/*
* set core url
* @param string $core_url
* @return self
*/
/**
* 设置_core_url
* @param mixed $core_url core_url
* @return mixed 返回操作结果
*/
public function set_core_url($core_url = null)
{
if ((null !== $core_url) && !is_string($core_url)) {
return $this;
}//force
if ($core_url === null) {
$filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';
if (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
$core_url = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility
} elseif (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {
$core_url = $_SERVER['SCRIPT_NAME'];
} elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {
$core_url = $_SERVER['PHP_SELF'];
} else {
// Backtrack up the script_filename to find the portion matching
// php_self
$path = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
$file = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '';
$segs = explode('/', trim($file, '/'));
$segs = array_reverse($segs);
$index = 0;
$last = count($segs);
$core_url = '';
do {
$seg = $segs[$index];
$core_url = '/' . $seg . $core_url;
++$index;
} while (($last > $index) && (false !== ($pos = strpos($path, $core_url))) && (0 != $pos));
}
// Does the baseUrl have anything in common with the request_uri?
$request_uri = $this->get_request_uri();
if (0 === strpos($request_uri, $core_url)) {
// full $baseUrl matches
$this->_core_url = $core_url;
return $this;
}
if (0 === strpos($request_uri, dirname($core_url))) {
// directory portion of $baseUrl matches
$this->_core_url = rtrim(dirname($core_url), '/');
return $this;
}
if (!strpos($request_uri, basename($core_url))) {
// no match whatsoever; set it blank
$this->_core_url = '';
return $this;
}
// If using mod_rewrite or ISAPI_Rewrite strip the script filename
// out of baseUrl. $pos !== 0 makes sure it is not matching a value
// from PATH_INFO or QUERY_STRING
if ((strlen($request_uri) >= strlen($core_url))
&& ((false !== ($pos = strpos($request_uri, $core_url))) && ($pos !== 0)))
{
$core_url = substr($request_uri, 0, $pos + strlen($core_url));
}
}
$this->_core_url = rtrim($core_url, '/');
return $this;
}//End Function
/*
* set path info
* @param string $path_info
* @return self
*/
public function set_path_info($path_info = null)
{
if ($path_info === null) {
$core_url = $this->get_core_url();
if (null === ($request_uri = $this->get_request_uri())) {
return $this;
}
// Remove the query string from REQUEST_URI
if ($pos = strpos($request_uri, '?')) {
$request_uri = substr($request_uri, 0, $pos);
}
if ((null !== $core_url)
&& (false === ($path_info = substr($request_uri, strlen($core_url)))))
{
// If substr() returns false then PATH_INFO is set to an empty string
$pathInfo = '';
} elseif (null === $core_url) {
$path_info = $request_uri;
}
}
$this->_path_info = $path_info;
return $this;
}//End Function
/*
* get http method
* @return string
*/
/**
* 获取_method
* @return mixed 返回结果
*/
public function get_method()
{
return $this->get_server('REQUEST_METHOD');
}//End Function
/*
* is GET request
* @return boolean
*/
public function is_get()
{
if('GET' == $this->get_method())
return true;
return false;
}//End Function
/*
* is POST request
* @return boolean
*/
/**
* is_post
* @return mixed 返回值
*/
public function is_post()
{
if('POST' == $this->get_method())
return true;
return false;
}//End Function
/*
* is PUT request
* @return boolean
*/
public function is_put()
{
if('PUT' == $this->get_method())
return true;
return false;
}//End Function
/*
* is DELETE request
* @return boolean
*/
/**
* is_delete
* @return mixed 返回值
*/
public function is_delete()
{
if('DELETE' == $this->get_method())
return true;
return false;
}//End Function
/*
* is HEAD request
* @return boolean
*/
public function is_head()
{
if('HEAD' == $this->get_method())
return true;
return false;
}//End Function
/*
* is OPTIONS request
* @return boolean
*/
/**
* is_options
* @return mixed 返回值
*/
public function is_options()
{
if('OPTIONS' == $this->get_method())
return true;
return false;
}//End Function
/*
* is ssl
* @return boolean
*/
public function is_https()
{
return ($this->get_scheme() === 'HTTPS');
}//End Function
/*
* is ajax
* @return boolean
*/
/**
* is_xml_httprequest
* @return mixed 返回值
*/
public function is_xml_httprequest()
{
return ($this->get_header('X_REQUESTED_WITH') == 'XMLHttpRequest');
}//End Function
/*
* is flase
* @return boolean
*/
public function is_flash_request()
{
$header = strtolower($this->get_header('USER_AGENT'));
return (strstr($header, ' flash')) ? true : false;
}//End Function
/*
* get request header info
* @return mixed
*/
/**
* 获取_header
* @param mixed $header header
* @return mixed 返回结果
*/
public function get_header($header)
{
$temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
if (!empty($_SERVER[$temp])) {
return $_SERVER[$temp];
}
if (function_exists('apache_request_headers')) {
$headers = apache_request_headers();
if (!empty($headers[$header])) {
return $headers[$header];
}
}
return false;
}//End Function
/*
* get scheme
* @return string
*/
public function get_scheme()
{
if (defined('WITH_HTTPS_SUPPORT') && strtolower(WITH_HTTPS_SUPPORT) == 'on') {
return "HTTPS";
}else{
return ($this->get_server('HTTPS') == 'on') ? "HTTPS" : "HTTP";
}
}//End Function
/*
* get host
* @return string
*/
/**
* 获取_http_host
* @return mixed 返回结果
*/
public function get_http_host()
{
$host = $this->get_server('HTTP_HOST');
if (!empty($host)) {
return $host;
}
$scheme = $this->get_scheme();
$name = $this->get_server('SERVER_NAME');
$port = $this->get_server('SERVER_PORT');
if (($scheme == "HTTP" && $port == 80) || ($scheme == "HTTPS" && $port == 443)) {
return $name;
} else {
return $name . ':' . $port;
}
}//End Function
/*
* get full_host
* @return string
*/
public function get_full_http_host()
{
return sprintf("%s://%s", strtolower($this->get_scheme()), $this->get_http_host());
}//End Function
/*
* get removeip
* @return string
*/
/**
* 获取_remote_ip
* @param mixed $checkProxy checkProxy
* @return mixed 返回结果
*/
public function get_remote_ip($checkProxy = false)
{
if($checkProxy && $this->get_server('HTTP_CLIENT_IP')){
$ip = $this->get_server('HTTP_CLIENT_IP');
} elseif ($checkProxy && $this->get_server('HTTP_X_REAL_IP')) {
$ip = $this->get_server('HTTP_X_REAL_IP');
} elseif ($checkProxy && $this->get_server('HTTP_X_FORWARDED_FOR')){
$ip = $this->get_server('HTTP_X_FORWARDED_FOR');
}else{
$ip = $this->get_server('REMOTE_ADDR');
}
return $ip;
}//End Function
/*
* browscap configuration setting in php.ini must point to the correct location of the browscap.ini file on your system
* http://browsers.garykeith.com/downloads.asp
* get browser
* @return string
*/
public function get_browser($return_array=true)
{
return get_browser($this->get_server('HTTP_USER_AGENT'), $return_array);
}//End Function
}//End Class