PHP에서 전체 URL 가져 오기
PHPPHP에서 전체 URL 가져 오기
이 코드를 사용하여 전체 URL을 얻습니다.
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
문제는 내 .htaccess에서 일부 마스크를 사용하므로 URL에서 볼 수있는 것이 항상 파일의 실제 경로가되는 것은 아닙니다.
내가 필요한 것은 URL을 얻는 것입니다. URL에 쓰여지는 것이 무엇이든지 덜 중요한 것입니다. 전체 URL입니다.
웹 브라우저의 탐색 표시 줄에 나타나는 방식과 서버의 실제 경로가 아닌 파일을 가져와야합니다.
해결법
-
==============================
1.
$ _SERVER [ 'REQUEST_URI], 즉
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
(큰 따옴표로 묶인 문자열 구문은 완벽하게 맞습니다)
HTTP와 HTTPS를 모두 지원하려면 다음을 사용할 수 있습니다.
$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
편집자 주 :이 코드를 사용하면 보안에 영향을 미칩니다. 클라이언트는 HTTP_HOST 및 REQUEST_URI를 원하는 임의의 값으로 설정할 수 있습니다.
-
==============================
2.
$url = "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"; $escaped_url = htmlspecialchars( $url, ENT_QUOTES, 'UTF-8' ); echo '<a href="' . $escaped_url . '">' . $escaped_url . '</a>';
//example.com/path/ 형식의 문제 및 최후의 경우에 대한 자세한 내용은 다음과 같습니다.
function url_origin( $s, $use_forwarded_host = false ) { $ssl = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' ); $sp = strtolower( $s['SERVER_PROTOCOL'] ); $protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' ); $port = $s['SERVER_PORT']; $port = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port; $host = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null ); $host = isset( $host ) ? $host : $s['SERVER_NAME'] . $port; return $protocol . '://' . $host; } function full_url( $s, $use_forwarded_host = false ) { return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI']; } $absolute_url = full_url( $_SERVER ); echo $absolute_url;
이것은 http://snipplr.com/view.php?codeview&id=2734의 크게 수정 된 버전입니다.
스키마 : // 사용자 이름 : 암호 @ 도메인 : 포트 / 경로? query_string # fragment_id
굵게 표시된 부분은 함수에 포함되지 않습니다.
HTTP_HOST 대 SERVER_NAME HTTP "호스트"헤더 매개 변수에 포트 번호가 필요합니까? https://stackoverflow.com/a/28049503/175071
-
==============================
3.
그 문제에 관해서는, print_r ($ _ SERVER)로 전체 배열을 살펴보고, 필요한 모든 것을 볼 수 있습니다 :)
-
==============================
4.
URL에 대한 예 : https://example.com/subFolder/yourfile.php?var=blabla#12345
//built-in function $x = parse_url($url); $x['scheme'] 🡺 https $x['host'] 🡺 example.com (or with WWW) $x['path'] 🡺 /subFolder/yourfile.php $x['query'] 🡺 var=blabla $x['fragment'] 🡺 12345 // hashtag outputed only in case, when hashtag-containing string was manually passed to function, otherwise PHP is unable to recognise hashtags in $_SERVER //built-in function (with this function, I only recommend to pass `parse_url`s output as argument) $A = pathinfo($url); $B = pathinfo(parse_url($url)['path']); $A['dirname'] 🡺 https://example.com/subFolder $B['dirname'] 🡺 /subFolder $A['basename'] 🡺 yourfile.php?var=blabla#12345 $B['basename'] 🡺 yourfile.php $A['extension'] 🡺 php?var=blabla#12345 $B['extension'] 🡺 php $A['filename'] 🡺 yourfile $B['filename'] 🡺 yourfile //=================================================== // //========== self-defined SERVER variables ========== // //=================================================== // $_SERVER["DOCUMENT_ROOT"] 🡺 /home/user/public_html $_SERVER["SERVER_ADDR"] 🡺 143.34.112.23 $_SERVER["SERVER_PORT"] 🡺 80(or 443 etc..) $_SERVER["REQUEST_SCHEME"] 🡺 https //similar: $_SERVER["SERVER_PROTOCOL"] $_SERVER['HTTP_HOST'] 🡺 example.com (or with WWW) //similar: $_SERVER["ERVER_NAME"] $_SERVER["REQUEST_URI"] 🡺 /subFolder/yourfile.php?var=blabla $_SERVER["QUERY_STRING"] 🡺 var=blabla __FILE__ 🡺 /home/user/public_html/subFolder/yourfile.php __DIR__ 🡺 /home/user/public_html/subFolder //same: dirname(__FILE__) $_SERVER["REQUEST_URI"] 🡺 /subFolder/yourfile.php?var=blabla parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)🡺 /subFolder/yourfile.php $_SERVER["PHP_SELF"] 🡺 /subFolder/yourfile.php // ==================================================================// //if "YOURFILE.php" is included in "PARENTFILE.php" , and you visit "PARENTFILE.PHP?abc": $_SERVER["SCRIPT_FILENAME"]🡺 /home/user/public_html/parentfile.php $_SERVER["PHP_SELF"] 🡺 /parentfile.php $_SERVER["REQUEST_URI"] 🡺 /parentfile.php?abc __FILE__ 🡺 /home/user/public_html/subFolder/yourfile.php // =================================================== // // ================= handy variables ================= // // =================================================== // //If site uses HTTPS: $HTTP_or_HTTPS = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=='off') || $_SERVER['SERVER_PORT']==443) ? 'https://':'http://' ); //in some cases, you need to add this condition too: if ('https'==$_SERVER['HTTP_X_FORWARDED_PROTO']) ... //To trim values to filename, i.e. basename($url) 🡺 yourfile.php //excellent solution to find origin $debug_files = debug_backtrace(); $initial_called_file = count($debug_files) ? $debug_files[count($debug_files) - 1]['file'] : __FILE__;
주의!:
//(let's say, if wordpress is installed in subdirectory: http://example.com/wpdir/) home_url() 🡺 http://example.com/wpdir/ //if is_ssl() is true, then it will be "https" get_stylesheet_directory_uri() 🡺 http://example.com/wpdir/wp-content/themes/THEME_NAME [same: get_bloginfo('template_url') ] get_stylesheet_directory() 🡺 /home/user/public_html/wpdir/wp-content/themes/THEME_NAME plugin_dir_url(__FILE__) 🡺 http://example.com/wpdir/wp-content/themes/PLUGIN_NAME plugin_dir_path(__FILE__) 🡺 /home/user/public_html/wpdir/wp-content/plugins/PLUGIN_NAME/
-
==============================
5.
다음은 코드를 최소한으로 유지하면서 3 진 성명을 사용하는 솔루션입니다.
$url = "http" . (($_SERVER['SERVER_PORT'] == 443) ? "s" : "") . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
이는 웹 서버가 HTTPS 용 표준 포트 443을 사용한다고 가정 할 때 가장 작고 쉬운 방법입니다.
-
==============================
6.
현재 URL을 찾는 가장 좋아하는 크로스 플랫폼 방법은 다음과 같습니다.
$url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
-
==============================
7.
간단히 다음을 사용하십시오 :
$uri = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
-
==============================
8.
function full_path() { $s = &$_SERVER; $ssl = (!empty($s['HTTPS']) && $s['HTTPS'] == 'on') ? true:false; $sp = strtolower($s['SERVER_PROTOCOL']); $protocol = substr($sp, 0, strpos($sp, '/')) . (($ssl) ? 's' : ''); $port = $s['SERVER_PORT']; $port = ((!$ssl && $port=='80') || ($ssl && $port=='443')) ? '' : ':'.$port; $host = isset($s['HTTP_X_FORWARDED_HOST']) ? $s['HTTP_X_FORWARDED_HOST'] : (isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : null); $host = isset($host) ? $host : $s['SERVER_NAME'] . $port; $uri = $protocol . '://' . $host . $s['REQUEST_URI']; $segments = explode('?', $uri, 2); $url = $segments[0]; return $url; }
참고 : 방금 "Timo Huovinen"코드에 대한 업데이트를 만들었으므로 URL에 아무런 영향을주지 않습니다. 이 URL은 평범하고 "? hi = i & am = a & get"과 같은 것을 제거합니다.
예:
http://www.website.com/index?get=information
다음과 같이 표시됩니다.
http://www.website.com/index
Get을 사용하여 특정 컨텐츠를 정의하지 않는 한, 코드를 사용하십시오! :-)
-
==============================
9.
모든 웹 서버에서 작동하는 명확한 코드 (Apache, nginx, IIS, ...) :
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
-
==============================
10.
트레이시 디버거 (Tracy Debugger)에서 영감을 얻은 나의 해결책이 있습니다. 다른 서버 포트를 지원하기 위해 변경되었습니다. $ _SERVER [ 'REQUEST_URI'] 또는 기본 서버 URL을 포함한 전체 현재 URL을 얻을 수 있습니다. 내 기능을 확인하십시오 :
function getCurrentUrl($full = true) { if (isset($_SERVER['REQUEST_URI'])) { $parse = parse_url( (isset($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'], 'off') ? 'https://' : 'http://') . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '')) . (($full) ? $_SERVER['REQUEST_URI'] : null) ); $parse['port'] = $_SERVER["SERVER_PORT"]; // Setup protocol for sure (80 is default) return http_build_url('', $parse); } }
다음은 테스트 코드입니다.
// Follow $_SERVER variables was set only for test $_SERVER['HTTPS'] = 'off'; // on $_SERVER['SERVER_PORT'] = '9999'; // Setup $_SERVER['HTTP_HOST'] = 'some.crazy.server.5.name:8088'; // Port is optional there $_SERVER['REQUEST_URI'] = '/150/tail/single/normal?get=param'; echo getCurrentUrl(); // http://some.crazy.server.5.name:9999/150/tail/single/normal?get=param echo getCurrentUrl(false); // http://some.crazy.server.5.name:9999/
-
==============================
11.
URL을 처리하기 위해이 함수를 만들었습니다.
<?php function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } ?>
-
==============================
12.
허용 된 답변과 동일한 기술이지만 HTTPS 지원 및 더 읽기 쉽기 :
$current_url = sprintf( '%s://%s/%s', isset($_SERVER['HTTPS']) ? 'https' : 'http', $_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'] );
-
==============================
13.
이 한 줄을 사용하여 상위 폴더 URL을 찾습니다 (pecl_http와 함께 제공되는 http_build_url ()에 대한 액세스 권한이없는 경우).
$url = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://').$_SERVER['SERVER_NAME'].str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname(dirname(__FILE__)));
-
==============================
14.
내 URI를 처리하도록이 클래스를 만들었습니다.
<?php /** ------------------------------------------------------------------------------------------------------------------- * URI CLASS * URI management class * * @author Sandu Liviu Catalin * @email slc(dot)universe(at)gmail(dot)com * @license Public Domain **/ abstract class _URI { /** --------------------------------------------------------------------------------------------------------------- * - BASE PARAMETERS * $_Script_Hidden - Hide the script name from the returned URI * $_Public_Path - Location where public resources are stored * $_Public_Relative - Return the relative path version of public location * $_Public_Skin - Is the skin directory located in the public directory * $_Skin_Path - Location where skins are stored * $_Skin_Relative - Return the relative path version of skin location * $_Skin_Default - Use this as the default system skin * $_Fallback_Base - Use this base URL if you can't extract the current URL * $_Fallback_Scheme - Use this scheme if you can't find it automatically * $_Fallback_User - Use this user name if you can't find it automatically * $_Fallback_Passwd - Use this password if you can't find it automatically * $_Fallback_Host - Use this host if you can't find it automatically * $_Fallback_Port - Use this port number if you can't find it automatically * $_Fallback_Script - Use this script name if you can't find it automatically * $_Separator_Scheme - Use this to separate the scheme from the rest of the url * $_Separator_Credentials - Use this to separate the user name from the password * $_Separator_Auth - Use this to separate the user name and password from host * $_Separator_Port - Use this to separate the port number from host * $_Separator_Query - Use this to separate the query data from base URL * $_Separator_Fragment - Use this to separate the fragment data from query data */ protected static $_Script_Hidden; protected static $_Public_Path; protected static $_Public_Relative; protected static $_Public_Skin; protected static $_Skin_Path; protected static $_Skin_Relative; protected static $_Skin_Default; protected static $_Fallback_Base; protected static $_Fallback_Scheme; protected static $_Fallback_User; protected static $_Fallback_Passwd; protected static $_Fallback_Host; protected static $_Fallback_Port; protected static $_Fallback_Script; protected static $_Separator_Scheme; protected static $_Separator_Credentials; protected static $_Separator_Auth; protected static $_Separator_Port; protected static $_Separator_Query; protected static $_Separator_Fragment; /** ---------------------------------------------------------------------------------------------------------------- * CACHED BASES * Precompiled common URLs for quick retrieval */ protected static $Base_Host; protected static $Base_App; protected static $Base_Script; protected static $Base_Current; protected static $Base_Public; protected static $Base_Skin; /** ---------------------------------------------------------------------------------------------------------------- * DATA CONTAINERS * Raw URI segments saved from extracted data */ protected static $__Segments = array( 'SCHEME' => '', 'USER' => '', 'PASSWD' => '', 'HOST' => '', 'PORT' => '', 'PATH' => '', 'SCRIPT' => '', 'INFO' => '', 'QUERY' => '', ); /** ---------------------------------------------------------------------------------------------------------------- * PARSER KEYWORDS * URI data asigned to specific keywords. */ protected static $__Parsers; /** ---------------------------------------------------------------------------------------------------------------- * CLASS INITIALIZER * Initialize the class * * @access public * @param $Params [array] - An associative array of supported parrameters * @return void */ public static function __Init($Params=array()) { // Configure the class self::$_Script_Hidden = (isset($Params['Script_Hidden'])) ? $Params['Script_Hidden'] : FALSE; self::$_Public_Path = (isset($Params['Public_Path'])) ? $Params['Public_Path'] : 'public'; self::$_Public_Relative = (isset($Params['Public_Relative'])) ? $Params['Public_Relative'] : TRUE; self::$_Public_Skin = (isset($Params['Public_Skin'])) ? $Params['Public_Skin'] : TRUE; self::$_Skin_Path = (isset($Params['Skin_Path'])) ? $Params['Skin_Path'] : 'themes'; self::$_Skin_Relative = (isset($Params['Skin_Relative'])) ? $Params['Skin_Relative'] : TRUE; self::$_Skin_Default = (isset($Params['Skin_Default'])) ? $Params['Skin_Default'] : 'default'; self::$_Fallback_Base = (isset($Params['Fallback_Base'])) ? $Params['Fallback_Base'] : '127.0.0.1'; self::$_Fallback_Scheme = (isset($Params['Fallback_Scheme'])) ? $Params['Fallback_Scheme'] : 'http'; self::$_Fallback_User = (isset($Params['Fallback_User'])) ? $Params['Fallback_User'] : ''; self::$_Fallback_Passwd = (isset($Params['Fallback_Passwd'])) ? $Params['Fallback_Passwd'] : ''; self::$_Fallback_Host = (isset($Params['Fallback_Host'])) ? $Params['Fallback_Host'] : '127.0.0.1'; self::$_Fallback_Port = (isset($Params['Fallback_Port'])) ? $Params['Fallback_Port'] : ''; self::$_Fallback_Script = (isset($Params['Fallback_Script'])) ? $Params['Fallback_Script'] : 'index.php'; self::$_Separator_Scheme = (isset($Params['Separator_Scheme'])) ? $Params['Separator_Scheme'] : '://'; self::$_Separator_Credentials = (isset($Params['Separator_Credentials'])) ? $Params['Separator_Credentials'] : ':'; self::$_Separator_Auth = (isset($Params['Separator_Auth'])) ? $Params['Separator_Auth'] : '@'; self::$_Separator_Port = (isset($Params['Separator_Port'])) ? $Params['Separator_Port'] : ':'; self::$_Separator_Query = (isset($Params['Separator_Query'])) ? $Params['Separator_Query'] : '?'; self::$_Separator_Fragment = (isset($Params['Separator_Fragment'])) ? $Params['Separator_Fragment'] : '#'; // Do some clean up of the configurations self::$_Public_Path = implode('/', explode('/', str_replace(array('/', '\\'), '/', self::$_Public_Path))); self::$_Skin_Path = implode('/', explode('/', str_replace(array('/', '\\'), '/', self::$_Skin_Path))); // Extract the URL information self::Extract(); // Precompile common bases self::$Base_Host = self::Compile('HOST'); self::$Base_App = self::Compile('PATH'); self::$Base_Script = self::$Base_App.(self::$_Script_Hidden ? '' : '/'.self::$__Segments['SCRIPT']); self::$Base_Current = self::$Base_Script.(empty(self::$__Segments['INFO']) ? '' : '/'.self::$__Segments['INFO']); self::$Base_Public = self::$_Public_Relative ? self::$_Public_Path : self::$Base_App.'/'.self::$_Public_Path; self::$Base_Skin = self::$_Skin_Relative ? self::$_Skin_Path : self::$Base_Public.'/'.self::$_Skin_Path; self::$Base_Skin .= '/'.self::$_Skin_Default; // Setup the parsers self::$__Parsers['SR_Key'][] = '%HostBase%'; self::$__Parsers['SR_Data'][] =& self::$Base_Host; self::$__Parsers['SR_Key'][] = '%AppBase%'; self::$__Parsers['SR_Data'][] =& self::$Base_App; self::$__Parsers['SR_Key'][] = '%ScriptBase%'; self::$__Parsers['SR_Data'][] =& self::$Base_Script; self::$__Parsers['SR_Key'][] = '%CurrentBase%'; self::$__Parsers['SR_Data'][] =& self::$Base_Current; self::$__Parsers['SR_Key'][] = '%PublicBase%'; self::$__Parsers['SR_Data'][] =& self::$Base_Public; self::$__Parsers['SR_Key'][] = '%SkinBase%'; self::$__Parsers['SR_Data'][] =& self::$Base_Skin; self::$__Parsers['SR_Data'][] =& self::$__Segments['SCHEME']; self::$__Parsers['SR_Key'][] = '%UserSegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['USER']; self::$__Parsers['SR_Key'][] = '%PasswdSegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['PASSWD']; self::$__Parsers['SR_Key'][] = '%HostSegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['HOST']; self::$__Parsers['SR_Key'][] = '%PortSegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['PORT']; self::$__Parsers['SR_Key'][] = '%PathSegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['PATH']; self::$__Parsers['SR_Key'][] = '%ScriptSegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['SCRIPT']; self::$__Parsers['SR_Key'][] = '%InfoSegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['INFO']; self::$__Parsers['SR_Key'][] = '%QuerySegment%'; self::$__Parsers['SR_Data'][] =& self::$__Segments['QUERY']; self::$__Parsers['SR_Key'][] = '%PublicPath%'; self::$__Parsers['SR_Data'][] =& self::$_Public_Path; self::$__Parsers['SR_Key'][] = '%SkinPath%'; self::$__Parsers['SR_Data'][] =& self::$_Skin_Path; self::$__Parsers['SR_Key'][] = '%DefaultSkin%'; self::$__Parsers['SR_Data'][] =& self::$_Skin_Default; // Everything OK so far } /** ---------------------------------------------------------------------------------------------------------------- * URI EXTRACTOR * Try every posibility to obtain all the segments of the current URL * * @access public * @return array */ public static function Extract() { // No point in executing twice to get the same result if (!empty(self::$__Segments['HOST'])) return self::$__Segments; // Let's try to have a falback for most basic data $Script_URI = (isset($_SERVER['SCRIPT_URI'])) ? parse_url($_SERVER['SCRIPT_URI']) : array(); if (empty($Script_URI)) { $Script_URI = parse_url(self::$_Fallback_Base); } // Try ever possibility to obtain the data that surounds the script name if (isset($_SERVER['PHP_SELF'])) { $Script_Path = $_SERVER['PHP_SELF']; } elseif (isset($_SERVER['REQUEST_URI'])) { $Script_Path = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']); } elseif (isset($Script_URI['path'])) { $Script_Path = $Script_URI['path']; } elseif (isset($_SERVER['SCRIPT_NAME'])) { $Script_Path = isset($_SERVER['SCRIPT_NAME']).(isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ''); } elseif (isset($_SERVER['DOCUMENT_ROOT']) && isset($_SERVER['SCRIPT_FILENAME'])) { $Script_Path = substr($_SERVER['SCRIPT_FILENAME'], strlen($_SERVER['DOCUMENT_ROOT']), (strlen($_SERVER['SCRIPT_FILENAME'])-strlen($_SERVER['DOCUMENT_ROOT']))); $Script_Path .= (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ''); } else { $Script_Path = ''; } // Explode the previously extracted data if (strlen($Script_Path) > 0) { $Script_Path = preg_split('/[\/]/', $Script_Path, -1, PREG_SPLIT_NO_EMPTY); } else { $Script_Path = array(); } // Try to obtain the name of the currently executed script if (isset($_SERVER['SCRIPT_FILENAME'])) { $Script_Name = basename($_SERVER['SCRIPT_FILENAME']); } elseif (isset($_SERVER['SCRIPT_NAME'])) { $Script_Name = basename($_SERVER['SCRIPT_NAME']); } else { $Script_Name = self::$_Fallback_Script; } // Try to find the name of the script in the script path $Script_Split = (is_string($Script_Name)) ? array_search($Script_Name, $Script_Path, TRUE) : NULL; // Try to obtain the request scheme if (isset($_SERVER['REQUEST_SCHEME'])) { self::$__Segments['SCHEME'] = $_SERVER['REQUEST_SCHEME']; } elseif (isset($_SERVER['SERVER_PROTOCOL'])) { self::$__Segments['SCHEME'] = strtolower($_SERVER['SERVER_PROTOCOL']); self::$__Segments['SCHEME'] = substr(self::$__Segments['SCHEME'], 0, strpos(self::$__Segments['SCHEME'], '/')); self::$__Segments['SCHEME'] .= (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') ? 's' : ''; } elseif (isset($Script_URI['scheme'])) { self::$__Segments['SCHEME'] = $Script_URI['scheme']; } else { self::$__Segments['SCHEME'] = self::$_Fallback_Scheme; } // Try to obtain the user name (if one was used) if (isset($_SERVER['PHP_AUTH_USER'])) { self::$__Segments['USER'] = $_SERVER['PHP_AUTH_USER']; } elseif (isset($Script_URI['user'])) { self::$__Segments['USER'] = $Script_URI['user']; } else { self::$__Segments['USER'] = self::$_Fallback_User; } // Try to obtain the user password (if one was used) if (isset($_SERVER['PHP_AUTH_PW'])) { self::$__Segments['PASSWD'] = $_SERVER['PHP_AUTH_PW']; } elseif (isset($Script_URI['pass'])) { self::$__Segments['PASSWD'] = $Script_URI['pass']; } else { self::$__Segments['PASSWD'] = self::$_Fallback_Passwd; } // Try to obtai the host name if (isset($_SERVER['SERVER_NAME'])) { self::$__Segments['HOST'] = $_SERVER['SERVER_NAME']; } elseif (isset($_SERVER['HTTP_HOST'])) { self::$__Segments['HOST'] = $_SERVER['HTTP_HOST']; } elseif (isset($Script_URI['host'])) { self::$__Segments['HOST'] = $Script_URI['host']; } else { self::$__Segments['HOST'] = self::$_Fallback_Host; } // Try to obtain the port number (if one was used) if (isset($Script_URI['port'])) { self::$__Segments['PORT'] = $Script_URI['port']; } else { self::$__Segments['PORT'] = self::$_Fallback_Port; } // Try to obtain the path to the script if (is_numeric($Script_Split)) { self::$__Segments['PATH'] = implode('/', array_slice($Script_Path, 0, $Script_Split, TRUE)); } else { self::$__Segments['PATH'] = ''; } // Try to obtain the Script name if (is_string($Script_Name)) { self::$__Segments['SCRIPT'] = $Script_Name; } else { self::$__Segments['SCRIPT'] = ''; } // Try to obtain any passed info if (isset($_SERVER['PATH_INFO'])) { self::$__Segments['INFO'] = implode('/', preg_split('/[\/]/', $_SERVER['PATH_INFO'], -1, PREG_SPLIT_NO_EMPTY)); } elseif (is_numeric($Script_Split)) { self::$__Segments['INFO'] = implode('/', array_slice($Script_Path, $Script_Split+1)); } else { self::$__Segments['INFO'] = ''; } // -----Pending Feature: Try to also extract the query string // Return the extracted URI segments return self::$__Segments; } /** ---------------------------------------------------------------------------------------------------------------- * URI COMPILER * Compile raw URI segments into a usable URL * * @access public * @param $Until [string] - The name of the segment where compilation should stop and return * @return string */ public static function Compile($Until=NULL) { $URI= ''; $Until = (is_string($Until)) ? strtoupper($Until) : $Until; if ($Until === 'SCHEME') { return $URI .= (self::$__Segments['SCHEME'] !== '') ? self::$__Segments['SCHEME'].self::$_Separator_Scheme : ''; } else { $URI .= (self::$__Segments['SCHEME'] !== '') ? self::$__Segments['SCHEME'].self::$_Separator_Scheme : ''; } if ($Until === 'USER') { return $URI .= (self::$__Segments['USER'] !== '') ? self::$__Segments['USER'].self::$_Separator_Credentials : ''; } else { $URI .= (self::$__Segments['USER'] !== '') ? self::$__Segments['USER'] : ''; } $URI .= (self::$__Segments['USER'] !== '' || self::$__Segments['PASSWD'] !== '') ? self::$_Separator_Credentials : ''; if ($Until === 'PASSWD') { return $URI .= (self::$__Segments['PASSWD'] !== '') ? self::$__Segments['PASSWD'].self::$_Separator_Auth : ''; } else { $URI .= (self::$__Segments['PASSWD'] !== '') ? self::$__Segments['PASSWD'] : ''; } $URI .= (self::$__Segments['USER'] !== '' || self::$__Segments['PASSWD'] !== '') ? self::$_Separator_Auth : ''; if ($Until === 'HOST') { return $URI .= (self::$__Segments['HOST'] !== '') ? self::$__Segments['HOST'] : ''; } else { $URI .= (self::$__Segments['HOST'] !== '') ? self::$__Segments['HOST'] : ''; } if ($Until === 'PORT') { return $URI .= (self::$__Segments['PORT'] !== '') ? self::$_Separator_Port.self::$__Segments['PORT'] : ''; } else { $URI .= (self::$__Segments['PORT'] !== '') ? self::$_Separator_Port.self::$__Segments['PORT'] : ''; } if ($Until === 'PATH') { return $URI .= (self::$__Segments['PATH'] !== '') ? '/'.self::$__Segments['PATH'] : ''; } else { $URI .= (self::$__Segments['PATH'] !== '') ? '/'.self::$__Segments['PATH'] : ''; } if ($Until === 'SCRIPT') { return $URI .= (self::$__Segments['SCRIPT'] !== '') ? '/'.self::$__Segments['SCRIPT'] : ''; } else { $URI .= (self::$__Segments['SCRIPT'] !== '') ? '/'.self::$__Segments['SCRIPT'] : ''; } if ($Until === 'INFO') { return $URI .= (self::$__Segments['INFO'] !== '') ? '/'.self::$__Segments['INFO'] : ''; } else { $URI .= (self::$__Segments['INFO'] !== '') ? '/'.self::$__Segments['INFO'] : ''; } return $URI; } /** ---------------------------------------------------------------------------------------------------------------- * SEGMENT RETRIEVER * Return a specific URI segment * * @access public * @param $Name [string] - The name of the segment you want * @return string (on success) bool (on failure) */ public static function Segment($Name) { if (isset(self::$__Segments[$Name])) { return self::$__Segments[$Name]; } return FALSE; } /** ---------------------------------------------------------------------------------------------------------------- * BASE RETRIEVER * Return a specific precompiled base * * @access public * @param $Name [string] - The name of the base you want * @return mixed (on success) boolean (on failure) */ public static function Base($Name) { switch ($Name) { case 'Host': case 'Domain': return self::$Base_Host; break; case 'App': case 'Base': return self::$Base_App; break; case 'Script': case 'Index': return self::$Base_Script; break; case 'Current': case 'This': return self::$Base_Current; break; case 'Public': case 'Web': return self::$Base_Public; break; case 'Skin': case 'Theme': return self::$Base_Skin; break; case 'All': return array( 'Host'=>self::$Base_Host, 'App'=>self::$Base_App, 'Script'=>self::$Base_Script, 'Current'=>self::$Base_Current, 'Public'=>self::$Base_Public, 'Skin'=>self::$Base_Skin, ); break; } return FALSE; } /** ---------------------------------------------------------------------------------------------------------------- * STRING PARSER * Replace known keywords in the specified string with current URI data * * @access public * @param $String [string] - A string that you want to parse * @return void */ public static function Parse($String) { if (is_string($String)) { return str_replace(self::$__Parsers['SR_Key'], self::$__Parsers['SR_Data'], $String); } elseif (is_array($String)) { foreach ($String as $K => $V) { $Parsed[$K] = self::$replace($V); } return $Parsed; } return FALSE; } } if (isset($_URI_Params)) { _URI::__Init($_URI_Params); } else { _URI::__Init(); }
물론 당신은 당신의 필요와 시스템에 그것을 적응시켜야합니다!
<?php // Change a few parameters before loading the class. $_URI_Params = array( 'Public_Relative' => FALSE, 'Skin_Relative' => FALSE, 'Skin_Default' => 'classic', // etc. ); // Get the URI class require('uri.php'); // Output all extracted URI segments echo '<pre>'; var_dump(_URI::Extract()); echo '</pre>'; // Output extracted segments individually echo 'Scheme: '._URI::Segment('SCHEME').'<br/>'; echo 'User: '._URI::Segment('USER').'<br/>'; echo 'Password: '._URI::Segment('PASSWD').'<br/>'; echo 'Host: '._URI::Segment('HOST').'<br/>'; echo 'Port: '._URI::Segment('PORT').'<br/>'; echo 'Path: '._URI::Segment('PATH').'<br/>'; echo 'Script: '._URI::Segment('SCRIPT').'<br/>'; echo 'Info: '._URI::Segment('INFO').'<br/>'; // Compile extracted segments into a usable URL echo '<br/>'; echo 'Full Compiled URI: '._URI::Compile().'<br/>'; echo '<br/>'; // Output precompiled common bases for a faster result and better performance echo 'Host Base: '._URI::Base('Host').'<br/>'; echo 'Application Base: '._URI::Base('App').'<br/>'; echo 'Running Script: '._URI::Base('Script').'<br/>'; echo 'Current URI Base: '._URI::Base('Current').'<br/>'; echo 'Public Folder Base: '._URI::Base('Public').'<br/>'; echo 'Skin Folder Base: '._URI::Base('Skin').'<br/>'; // Get all the precompiled bases in an associative array echo '<pre>'; var_dump(_URI::Base('All')); echo '</pre>'; // Parse an example string and replace known keys with actual URI data. echo _URI::Parse('This is my current domain: %HostBase% And the current application is here: %AppBase% I load my skins form: %SkinBase% etc. ');
여전히 완벽해야하지만 중앙 집중식 URI 시스템을위한 신 솔루션입니다. D
-
==============================
15.
이것은 아파치 환경 변수로하기 쉽다. 이것은 아파치 2에서만 작동하는데, 당신이 사용하고 있다고 가정합니다.
다음 PHP 코드를 사용하십시오.
<?php $request_url = apache_getenv("HTTP_HOST") . apache_getenv("REQUEST_URI"); echo $request_url; ?>
-
==============================
16.
이 시도:
print_r($_SERVER);
$ _SERVER는 헤더, 경로 및 스크립트 위치와 같은 정보가 들어있는 배열입니다. 이 배열의 항목은 웹 서버에서 만듭니다. 모든 웹 서버가 이들을 제공 할 것이라는 보장은 없습니다. 서버는 일부를 생략하거나 여기에 나열되지 않은 다른 서버를 제공 할 수 있습니다. 즉, 많은 수의 변수가»CGI / 1.1 사양에서 설명되므로 예상 할 수 있어야합니다.
$ HTTP_SERVER_VARS는 동일한 초기 정보를 포함하지만 슈퍼 글로벌은 아닙니다. ($ HTTP_SERVER_VARS와 $ _SERVER는 서로 다른 변수이고 PHP는 그것들을 처리합니다)
-
==============================
17.
이것은 귀하의 문제에 대한 해결책입니다 :
//Fetch page URL by this $url = $_SERVER['REQUEST_URI']; echo "$url<br />"; //It will print //fetch host by this $host=$_SERVER['HTTP_HOST']; echo "$host<br />"; //You can fetch the full URL by this $fullurl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo $fullurl;
-
==============================
18.
인수없이 http_build_url을 사용하면 현재 페이지의 전체 URL을 얻을 수 있습니다.
$url = http_build_url();
-
==============================
19.
나는이 성명서를 사용했다.
$base = "http://$_SERVER[SERVER_NAME]:$_SERVER[SERVER_PORT]$my_web_base_path"; $url = $base . "/" . dirname(dirname(__FILE__));
이게 당신을 도울 수 있기를 바랍니다.
-
==============================
20.
이 시도:
$pageURL = $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://'; $pageURL .= $_SERVER['SERVER_PORT'] != '80' ? $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"] : $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; echo $pageURL;
-
==============================
21.
나는 아래의 코드를 사용했으며, 두 경우 모두 HTTP와 HTTPS를 위해 잘 작동한다.
function curPageURL() { if(isset($_SERVER["HTTPS"]) && !empty($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] != 'on' )) { $url = 'https://'.$_SERVER["SERVER_NAME"];//https url } else { $url = 'http://'.$_SERVER["SERVER_NAME"];//http url } if(( $_SERVER["SERVER_PORT"] != 80 )) { $url .= $_SERVER["SERVER_PORT"]; } $url .= $_SERVER["REQUEST_URI"]; return $url; } echo curPageURL();
데모
-
==============================
22.
$base_dir = __DIR__; // Absolute path to your installation, ex: /var/www/mywebsite $doc_root = preg_replace("!{$_SERVER['SCRIPT_NAME']}$!", '', $_SERVER['SCRIPT_FILENAME']); # ex: /var/www $base_url = preg_replace("!^{$doc_root}!", '', $base_dir); # ex: '' or '/mywebsite' $base_url = str_replace('\\', '/', $base_url);//On Windows $base_url = str_replace($doc_root, '', $base_url);//On Windows $protocol = empty($_SERVER['HTTPS']) ? 'http' : 'https'; $port = $_SERVER['SERVER_PORT']; $disp_port = ($protocol == 'http' && $port == 80 || $protocol == 'https' && $port == 443) ? '' : ":$port"; $domain = $_SERVER['SERVER_NAME']; $full_url = "$protocol://{$domain}{$disp_port}{$base_url}"; # Ex: 'http://example.com', 'https://example.com/mywebsite', etc.
-
==============================
23.
아래 스 니펫에서 설명한 것처럼 HTTP_ORIGIN을 사용할 수 있습니다.
if ( ! array_key_exists( 'HTTP_ORIGIN', $_SERVER ) ) { $this->referer = $_SERVER['SERVER_NAME']; } else { $this->referer = $_SERVER['HTTP_ORIGIN']; }
-
==============================
24.
아주 간단한 사용 :
function current_url() { $current_url = ( $_SERVER["HTTPS"] != 'on' ) ? 'http://'.$_SERVER["SERVER_NAME"] : 'https://'.$_SERVER["SERVER_NAME"]; $current_url .= ( $_SERVER["SERVER_PORT"] != 80 ) ? ":".$_SERVER["SERVER_PORT"] : ""; $current_url .= $_SERVER["REQUEST_URI"]; return $current_url; }
-
==============================
25.
가장 좋은 답변을 편집 한 후에 롤백되었으므로 별도의 답변으로 게시하고 있습니다.
용도:
$actual_link = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
HTTP와 HTTPS를 모두 지원하려면 다음을 수행하십시오.
$actual_link = (isset($_SERVER['HTTPS']) ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
-
==============================
26.
나는이 방법이 좋다라고 생각한다. 시험해 보라.
if($_SERVER['HTTP_HOST'] == "localhost"){ define('SITEURL', 'http://' . $_SERVER['HTTP_HOST']); define('SITEPATH', $_SERVER['DOCUMENT_ROOT']); define('CSS', $_SERVER['DOCUMENT_ROOT'] . '/css/'); define('IMAGES', $_SERVER['DOCUMENT_ROOT'] . '/images/'); } else{ define('SITEURL', 'http://' . $_SERVER['HTTP_HOST']); define('SITEPATH', $_SERVER['DOCUMENT_ROOT']); define('TEMPLATE', $_SERVER['DOCUMENT_ROOT'] . '/incs/template/'); define('CSS', $_SERVER['DOCUMENT_ROOT'] . '/css/'); define('IMAGES', $_SERVER['DOCUMENT_ROOT'] . '/images/'); }
-
==============================
27.
이는 HTTP와 HTTPS 모두에서 작동합니다.
echo 'http' . (($_SERVER['HTTPS'] == 'on') ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
이런 식으로 출력하십시오.
-
==============================
28.
$page_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
더 많은 정보 : https://codeupweb.wordpress.com/2017/10/11/how-to-get-the-full-url-of-page-using-php/
-
==============================
29.
다음은 $ _SERVER [ 'REQUEST_URI']의 잠재적 부족을 보완하는 PHP의 filter_input 함수를 사용하여보다 안전한 버전의 승인 된 답변의 기초입니다.
$protocol_https = filter_input(INPUT_SERVER, 'HTTPS', FILTER_SANITIZE_STRING); $host = filter_input(INPUT_SERVER, 'HTTP_HOST', FILTER_SANITIZE_URL); $request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL); if(strlen($request_uri) == 0) { $request_uri = filter_input(INPUT_SERVER, 'SCRIPT_NAME', FILTER_SANITIZE_URL); $query_string = filter_input(INPUT_SERVER, 'QUERY_STRING', FILTER_SANITIZE_URL); if($query_string) { $request_uri .= '?' . $query_string; } } $full_url = ($protocol_https ? 'https' : 'http') . '://' . $host . $request_uri;
다른 필터를 사용하여 원하는대로 조정할 수 있습니다.
-
==============================
30.
public static function getCurrentURL() { $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'https') === false ? 'http' : 'https'; $host = $_SERVER['HTTP_HOST']; $script = $_SERVER['SCRIPT_NAME']; $params = $_SERVER['QUERY_STRING'] == '' ? '' : '?' . $_SERVER['QUERY_STRING']; return $protocol . '://' . $host . $script . $params; }
from https://stackoverflow.com/questions/6768793/get-the-full-url-in-php by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
정의되지 않은 메소드 호출 mysqli_stmt :: get_result (0) | 2018.09.02 |
---|---|
mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows 등 ... 매개 변수 1이 리소스가 될 것으로 예상 함 (0) | 2018.09.02 |
로컬 호스트에서 메일을 보내도록 XAMPP를 구성하는 방법? (0) | 2018.09.02 |
어떻게 PHP에서 다차원 배열을 정렬합니까 [duplicate] (0) | 2018.09.02 |
PHP 짧은 태그를 활성화하는 방법? (0) | 2018.09.02 |