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


Posted in PHP onDecember 30, 2015

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

<?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;
}
?>

定义该函数之后就可以直接调用了:

<?php
 echo curPageURL();
?>

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

示例二:

<?php
// 说明:获取无参数URL

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

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

  $this_page = $_SERVER["REQUEST_URI"];
  
  // 只取 ? 前面的内容
  if (strpos($this_page, "?") !== false)
  {
    $this_pages = explode("?", $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;
}
?>

当然也可以采用 $_SERVER['PHP_SELF'] (该变量不返回URL中的参数),

示例三:

<?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;
}
?>

另外,$_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'] 值,可以使用以下方案:

<?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'] .'?'. $_SERVER['argv'][0];
    }
    else
    {
      $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
    }
  }
  return $uri;
}
?>

再为大家分享两种解决方法:

第一种方法:

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

第二种方法:

  • javascript实现
top.location.href  顶级窗口的地址
this.location.href 当前窗口的地址
  • PHP实现
#测试网址:   http://localhost/blog/testurl.php?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'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5

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

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

希望本文所述对大家学习php程序设计有所帮助。

PHP 相关文章推荐
ajax+php打造进度条 readyState各状态
Mar 20 PHP
php上传文件的增强函数
Jul 21 PHP
PHPThumb图片处理实例
May 03 PHP
PHP生成自适应大小的缩略图类及使用方法分享
May 06 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
php之curl设置超时实例
Nov 03 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
php实现根据身份证获取精准年龄
Feb 26 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
WordPress伪静态规则设置代码实例
Dec 10 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 #PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 #PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 #PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 #PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 #PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 #PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 #PHP
You might like
?算你??的 PHP 程式大小
2006/12/06 PHP
PHP 命名空间实例说明
2011/01/27 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
python获取本机所有IP地址的方法
2018/12/26 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
《大自然的语言》教学反思
2014/04/08 职场文书
局火灾防控工作方案
2014/05/25 职场文书
节能环保标语
2014/06/12 职场文书
学校安全责任书范本
2014/07/23 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
单位婚育证明范本
2014/11/21 职场文书
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL