Home  >  Article  >  Backend Development  >  php获取当前页面完整URL地址_php技巧

php获取当前页面完整URL地址_php技巧

WBOY
WBOYOriginal
2016-05-16 20:01:154421browse

使用PHP编写程序的时候,我们常常想要获取当前页面的URL。下面提供一个用于获取当前页面URL的函数以及使用方法:
示例一:

<&#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,即你在浏览器地址栏看到的内容。但是,有时候我们不想要URL中的参数( ? 号后面的内容),如:http://www.ludou.org/hello.html?u=123,只想获取http://www.ludou.org/hello.html,你可以将以上函数按示例二修改。

示例二:

<&#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中的参数),

示例三:

<&#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使用rewrite规则的时候,$_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;>

第二种方法:

  • javascript实现
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程序设计有所帮助。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn