복붙노트

PHP에서 전체 URL 가져 오기

PHP

PHP에서 전체 URL 가져 오기

이 코드를 사용하여 전체 URL을 얻습니다.

$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

문제는 내 .htaccess에서 일부 마스크를 사용하므로 URL에서 볼 수있는 것이 항상 파일의 실제 경로가되는 것은 아닙니다.

내가 필요한 것은 URL을 얻는 것입니다. URL에 쓰여지는 것이 무엇이든지 덜 중요한 것입니다. 전체 URL입니다.

웹 브라우저의 탐색 표시 줄에 나타나는 방식과 서버의 실제 경로가 아닌 파일을 가져와야합니다.

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    3.

    그 문제에 관해서는, print_r ($ _ SERVER)로 전체 배열을 살펴보고, 필요한 모든 것을 볼 수 있습니다 :)

  4. ==============================

    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. ==============================

    5.

    다음은 코드를 최소한으로 유지하면서 3 진 성명을 사용하는 솔루션입니다.

    $url = "http" . (($_SERVER['SERVER_PORT'] == 443) ? "s" : "") . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    

    이는 웹 서버가 HTTPS 용 표준 포트 443을 사용한다고 가정 할 때 가장 작고 쉬운 방법입니다.

  6. ==============================

    6.

    현재 URL을 찾는 가장 좋아하는 크로스 플랫폼 방법은 다음과 같습니다.

    $url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    
  7. ==============================

    7.

    간단히 다음을 사용하십시오 :

    $uri = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
    
  8. ==============================

    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. ==============================

    9.

    모든 웹 서버에서 작동하는 명확한 코드 (Apache, nginx, IIS, ...) :

    $url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    
  10. ==============================

    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. ==============================

    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. ==============================

    12.

    허용 된 답변과 동일한 기술이지만 HTTPS 지원 및 더 읽기 쉽기 :

    $current_url = sprintf(
        '%s://%s/%s',
        isset($_SERVER['HTTPS']) ? 'https' : 'http',
        $_SERVER['HTTP_HOST'],
        $_SERVER['REQUEST_URI']
    );
    
  13. ==============================

    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. ==============================

    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. ==============================

    15.

    이것은 아파치 환경 변수로하기 쉽다. 이것은 아파치 2에서만 작동하는데, 당신이 사용하고 있다고 가정합니다.

    다음 PHP 코드를 사용하십시오.

    <?php
        $request_url = apache_getenv("HTTP_HOST") . apache_getenv("REQUEST_URI");
        echo $request_url;
    ?>
    
  16. ==============================

    16.

    이 시도:

    print_r($_SERVER);
    

    $ _SERVER는 헤더, 경로 및 스크립트 위치와 같은 정보가 들어있는 배열입니다. 이 배열의 항목은 웹 서버에서 만듭니다. 모든 웹 서버가 이들을 제공 할 것이라는 보장은 없습니다. 서버는 일부를 생략하거나 여기에 나열되지 않은 다른 서버를 제공 할 수 있습니다. 즉, 많은 수의 변수가»CGI / 1.1 사양에서 설명되므로 예상 할 수 있어야합니다.

    $ HTTP_SERVER_VARS는 동일한 초기 정보를 포함하지만 슈퍼 글로벌은 아닙니다. ($ HTTP_SERVER_VARS와 $ _SERVER는 서로 다른 변수이고 PHP는 그것들을 처리합니다)

  17. ==============================

    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. ==============================

    18.

    인수없이 http_build_url을 사용하면 현재 페이지의 전체 URL을 얻을 수 있습니다.

    $url = http_build_url();
    
  19. ==============================

    19.

    나는이 성명서를 사용했다.

    $base = "http://$_SERVER[SERVER_NAME]:$_SERVER[SERVER_PORT]$my_web_base_path";
    $url = $base . "/" . dirname(dirname(__FILE__));
    

    이게 당신을 도울 수 있기를 바랍니다.

  20. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    23.

    아래 스 니펫에서 설명한 것처럼 HTTP_ORIGIN을 사용할 수 있습니다.

    if ( ! array_key_exists( 'HTTP_ORIGIN', $_SERVER ) ) {
        $this->referer = $_SERVER['SERVER_NAME'];
    } else {
        $this->referer = $_SERVER['HTTP_ORIGIN'];
    }
    
  24. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    27.

    이는 HTTP와 HTTPS 모두에서 작동합니다.

    echo 'http' . (($_SERVER['HTTPS'] == 'on') ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    

    이런 식으로 출력하십시오.

  28. ==============================

    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. ==============================

    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. ==============================

    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;
    }
    
  31. from https://stackoverflow.com/questions/6768793/get-the-full-url-in-php by cc-by-sa and MIT lisence