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

178 lines
6.6 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.
*/
class base_request{
var $request_params = array();
/**
* 设置_params
* @param mixed $request_params 参数
* @return mixed 返回操作结果
*/
public function set_params($request_params){
$this->request_params = $request_params;
}
static function get_base_url(){
$filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';
if (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
$base_url = $_SERVER['ORIG_SCRIPT_NAME'];
} elseif (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {
$base_url = $_SERVER['SCRIPT_NAME'];
} elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {
$base_url = $_SERVER['PHP_SELF'];
} else {
$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);
$base_url = '';
do {
$seg = $segs[$index];
$base_url = '/' . $seg . $base_url;
++$index;
} while (($last > $index) && (false !== ($pos = strpos($path, $base_url))) && (0 != $pos));
}
$request_uri = self::get_request_uri();
if (0 === strpos($request_uri, $base_url)) {
return self::dirname($base_url);
}
if (0 === strpos($request_uri, strstr(PHP_OS, "WIN") ? str_replace('\\', '/', dirname($base_url)) : dirname($base_url))) {
return self::dirname($base_url);
}
$truncatedrequest_uri = $request_uri;
if (($pos = strpos($request_uri, '?')) !== false) {
$truncatedrequest_uri = substr($request_uri, 0, $pos);
}
$basename = basename($base_url);
if (empty($basename) || !strpos($truncatedrequest_uri, $basename)) {
return;
}
if ((strlen($request_uri) >= strlen($base_url))
&& ((false !== ($pos = strpos($request_uri, $base_url))) && ($pos !== 0))) {
$base_url = substr($request_uri, 0, $pos + strlen($base_url));
}
return rtrim(self::dirname($base_url), '/');
}
static function get_path_info() {
$path_info = '';
if (isset($_SERVER['PATH_INFO'])) {
$path_info = $_SERVER['PATH_INFO'];
}elseif(isset($_SERVER['ORIG_PATH_INFO'])){
$path_info = $_SERVER['ORIG_PATH_INFO'];
$script_name = self::get_script_name();
if(substr($script_name, -1, 1) == '/'){
$path_info = $path_info . '/';
}
}else{
$script_name = self::get_script_name();
$script_dir = preg_replace('/[^\/]+$/', '', $script_name);
$request_uri = self::get_request_uri();
$urlinfo = parse_url($request_uri);
if ( strpos($urlinfo['path'], $script_name) === 0) {
$path_info = substr($urlinfo['path'], strlen($script_name));
} elseif ( strpos($urlinfo['path'], $script_dir) === 0 ) {
$path_info = substr($urlinfo['path'], strlen($script_dir));
}
}
if($path_info){
$path_info = "/".ltrim($path_info,"/");
}
return $path_info;
}
static function get_script_name() {
return isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : (isset($_SERVER['ORIG_SCRIPT_NAME']) ? $_SERVER['ORIG_SCRIPT_NAME'] : '');
}
static function get_request_uri() {
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
return $_SERVER['HTTP_X_REWRITE_URL'];
} elseif (isset($_SERVER['REQUEST_URI'])) {
return $_SERVER['REQUEST_URI'];
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) {
return $_SERVER['ORIG_PATH_INFO'] . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '');
}
}
static function get_host() {
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
//$host = $_SERVER['HTTP_HOST'];
if (!empty($host)) {
return $host;
}
$scheme = self::get_schema();
$name = self::get_name();
$port = self::get_port();
if (($scheme == "HTTP" && $port == 80) || ($scheme == "HTTPS" && $port == 443)) {
return $name;
} else {
return $name . ':' . $port;
}
}
static function get_name()
{
return $_SERVER['SERVER_NAME'];
}//End Function
static function get_schema()
{
if (defined('WITH_HTTPS_SUPPORT') && strtolower(WITH_HTTPS_SUPPORT) == 'on') {
return "HTTPS";
}else{
return ($_SERVER['HTTPS'] == 'on') ? "HTTPS" : "HTTP";
}
}//End Function
static function get_port()
{
return $_SERVER['SERVER_PORT'];
}//End Function
static function get_remote_addr(){
if(!isset($GLOBALS['_REMOTE_ADDR_'])){
$addrs = array();
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
foreach( array_reverse( explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) as $x_f ) {
$x_f = trim($x_f);
if ( preg_match( '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $x_f ) ) {
$addrs[] = $x_f;
}
}
}
$GLOBALS['_REMOTE_ADDR_'] = isset($addrs[0])?$addrs[0]:$_SERVER['REMOTE_ADDR'];
}
return $GLOBALS['_REMOTE_ADDR_'];
}
static function dirname($dir){
return substr($dir,0,strrpos($dir,"/"));
}
}