>  기사  >  백엔드 개발  >  php_php 팁에서 현재 페이지의 전체 URL 주소를 얻으세요

php_php 팁에서 현재 페이지의 전체 URL 주소를 얻으세요

WBOY
WBOY원래의
2016-05-16 20:01:154377검색

PHP로 프로그램을 작성할 때 현재 페이지의 URL을 알고 싶은 경우가 많습니다. 다음은 현재 페이지 URL을 가져오는 기능과 사용 방법을 제공합니다.
예 1:

<&#63;php
// 说明:获取完整URL

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;
}
&#63;>

이 함수를 정의한 후 직접 호출할 수 있습니다.

<&#63;php
 echo curPageURL();
&#63;>

위 함수는 브라우저 주소 표시줄에 표시되는 현재 페이지의 전체 URL을 가져올 수 있습니다. 그러나 때때로 http://www.ludou.org/hello.html?u=123과 같이 URL(? 번호 뒤의 내용)에 매개변수가 포함되는 것을 원하지 않는 경우가 있습니다. http://www.ludou.org/hello.html을 얻으려면 위의 함수를 예제 2와 같이 수정할 수 있습니다.

예 2:

<&#63;php
// 说明:获取无参数URL

function curPageURL() 
{
  $pageURL = 'http';

  if ($_SERVER["HTTPS"] == "on") 
  {
    $pageURL .= "s";
  }
  $pageURL .= "://";

  $this_page = $_SERVER["REQUEST_URI"];
  
  // 只取 &#63; 前面的内容
  if (strpos($this_page, "&#63;") !== false)
  {
    $this_pages = explode("&#63;", $this_page);
    $this_page = reset($this_pages);
  }

  if ($_SERVER["SERVER_PORT"] != "80") 
  {
    $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $this_page;
  } 
  else 
  {
    $pageURL .= $_SERVER["SERVER_NAME"] . $this_page;
  }
  return $pageURL;
}
&#63;>

물론 $_SERVER['PHP_SELF'](이 변수는 URL의 매개변수를 반환하지 않음)를 사용할 수도 있습니다.

예 3:

<&#63;php
// 说明:获取无参数URL

function curPageURL() 
{
  $pageURL = 'http';

  if ($_SERVER["HTTPS"] == "on") 
  {
    $pageURL .= "s";
  }
  $pageURL .= "://";

  if ($_SERVER["SERVER_PORT"] != "80") 
  {
    $pageURL .= $_SERVER["SERVER_NAME"].":" . $_SERVER["SERVER_PORT"] . $_SERVER['PHP_SELF'];
  } 
  else 
  {
    $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER['PHP_SELF'];
  }
  return $pageURL;
}
&#63;>

또한 $_SERVER['REQUEST_URI'] 및 $_SERVER['REQUEST_URL']은 약간 다릅니다.
$_SERVER["REQUEST_URI"] 매개변수를 포함한 전체 경로를 반환합니다(/directory/file.ext?query=string)
$_SERVER['REQUEST_URL'] 매개변수를 제외한 파일 경로(/directory/file.ext)만 반환합니다. 이는 $_SERVER['PHP_SELF']와 유사합니다. $_SERVER['REQUEST_URL'] 일부 서버에서는 사용할 수 없습니다!

참고: URL이 다시 쓰기 규칙을 사용하는 경우 $_SERVER['PHP_SELF'] 및 $_SERVER["REQUEST_URL"]가 원하는 것을 반환하지 않을 수 있습니다

마지막 알림, $_SERVER["REQUEST_URI"]는 Apache에서만 지원됩니다. $_SERVER['REQUEST_URI'] 값을 얻으려면 다음 해결 방법을 사용할 수 있습니다.

<&#63;php
// 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案
function request_uri()
{
  if (isset($_SERVER['REQUEST_URI']))
  {
    $uri = $_SERVER['REQUEST_URI']; 
  }
  else
  {
    if (isset($_SERVER['argv']))
    {
      $uri = $_SERVER['PHP_SELF'] .'&#63;'. $_SERVER['argv'][0];
    }
    else
    {
      $uri = $_SERVER['PHP_SELF'] .'&#63;'. $_SERVER['QUERY_STRING'];
    }
  }
  return $uri;
}
&#63;>

두 가지 솔루션을 더 공유해 드리겠습니다.

첫 번째 방법:

<&#63;php
/**
 * 获取当前页面完整URL地址
 */
function get_url() {
  $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' &#63; 'https://' : 'http://';
  $php_self = $_SERVER['PHP_SELF'] &#63; $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
  $path_info = isset($_SERVER['PATH_INFO']) &#63; $_SERVER['PATH_INFO'] : '';
  $relate_url = isset($_SERVER['REQUEST_URI']) &#63; $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING']) &#63; '&#63;'.$_SERVER['QUERY_STRING'] : $path_info);
  return $sys_protocal.(isset($_SERVER['HTTP_HOST']) &#63; $_SERVER['HTTP_HOST'] : '').$relate_url;
}
 
echo get_url();
&#63;>

두 번째 방법:

  • 자바스크립트 구현
top.location.href  顶级窗口的地址
this.location.href 当前窗口的地址


  • PHP 구현

#测试网址:   http://localhost/blog/testurl.php&#63;id=5
//获取域名或主机地址 
echo $_SERVER['HTTP_HOST']."<br>"; #localhost

//获取网页地址 
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php

//获取网址参数 
echo $_SERVER["QUERY_STRING"]."<br>"; #id=5

//获取用户代理 
echo $_SERVER['HTTP_REFERER']."<br>"; 

//获取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'&#63;'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php&#63;id=5

//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
#http://localhost:80/blog/testurl.php&#63;id=5

//只取路径
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]; 
echo dirname($url);
#http://localhost/blog

이 기사가 PHP 프로그래밍을 배우는 모든 사람에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.