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 相关文章推荐
PHP脚本的10个技巧(3)
Oct 09 PHP
提升PHP速度全攻略
Oct 09 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
PHP设计模式之装饰者模式
Feb 29 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
PHP数组相关函数汇总
2015/03/24 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
python中__call__方法示例分析
2014/10/11 Python
Python实现字典依据value排序
2016/02/24 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
创业计划书——互联网商机
2014/01/12 职场文书
影子教师研修方案
2014/06/14 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
浅析MongoDB之安全认证
2021/06/26 MongoDB