Получение полного URL-адреса текущей страницы (PHP) [дубликат]


На этот вопрос уже есть ответ здесь:

Я работаю над этой страницей: http://localhost/projectname/custom.php

Как <?php echo $_SERVER['REQUEST_URI']; ?>, так и <?php echo $PHP_SELF; ?> не указывают полное местоположение. Что я должен использовать, чтобы получить полное местоположение URL-адреса?

Author: Skatox, 2010-02-10

5 answers

function selfURL() 
{ 
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; 
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; 
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); 
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; 
} 

function strleft($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); }
 11
Author: Sorantis, 2010-02-10 12:58:12

Насколько я знаю, собственного метода не существует, но вы могли бы использовать это:

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;
}
 8
Author: harpax, 2014-09-15 22:34:42

Если вы пытаетесь добавить переменные обратно в конец URL-адреса, который вы передаете через скрипт отслеживания ссылок, например, вы можете попробовать следующее:

$URI = array();
foreach($_GET as $key=>$val)
{
   if ($key!="link"&&$key!="id"&&$key!="type") $URI[] = "$key=".urlencode($val);
}
if (sizeof($URI)>0) $link.="&".join("&",$URI);

В этом случае "ссылка", "идентификатор" и "тип" были переменными, которые мне были нужны для отслеживания, но URL-адрес, который я хотел отслеживать, имел переменную в конце, которая была удалена моим сценарием, как если бы это была часть отправляемого запроса; Мне нужно было добавить его обратно в URL-адрес ссылки, прежде чем передавать его в заголовок ("Местоположение:".$ссылка).

Если это то, чего вы пытаетесь достичь, это отлично работает и короче, чем в приведенном выше примере.

 2
Author: Nancy Hastings-Trew, 2013-10-23 20:18:20

Проверьте это... немного длинный и грязный, но работает хорошо...

 function absolutizeUrl ( $u, $p )
 {
    $url = parse_url( $u );
    $page = parse_url( $p );

    if ( strpos( $u , '/' ) === 0 )
    {
            //already absolute              
    } else {
            $basePath = '';
            if (
                    isset( $page[ 'path' ] )
                    && strpos( ltrim( $page[ 'path' ], '/' ), '/' )
            )
            {
                    $baseTokens = explode( '/', $page[ 'path' ] );
                    array_pop( $baseTokens ); // strip basename                     
                    $baseTokens[] = $u;
                    $u = join( '/', $baseTokens );
            }
    }
    if ( ! isset( $url[ 'host' ]))
    {
            $u = 'http://'.$page[ 'host' ].'/'.ltrim( $u, '/' );
    }
    return $u;
  }
 1
Author: Teja Kantamneni, 2010-02-10 12:59:50

Я нашел этот код очень полезным

$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === 
FALSE ? 'http' : 'https';            // Get protocol HTTP/HTTPS
$host     = $_SERVER['HTTP_HOST'];   // Get  www.domain.com
$script   = $_SERVER['SCRIPT_NAME']; // Get folder/file.php
$params   = $_SERVER['QUERY_STRING'];// Get Parameters occupation=odesk&name=ashik

$currentUrl = $protocol . '://' . $host . $script . '?' . $params; // Adding all

echo $currentUrl;
 1
Author: Muhammad Ashikuzzaman, 2014-05-20 17:40:46