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中常用编辑器推荐
Jan 02 PHP
PHP实现邮件群发的源码
Jun 18 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
PHP面试题之文件目录操作
Oct 15 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
PHP echo()函数讲解
Feb 15 PHP
详解PHP设计模式之依赖注入模式
May 25 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添加MySQL数据记录代码
2008/06/07 PHP
php include,include_once,require,require_once
2008/09/05 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python获取地震信息 微信实时推送
2019/06/18 Python
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
《理想》教学反思
2014/02/17 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
质量保证书范本
2014/04/29 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
学习十八大的心得体会
2014/09/12 职场文书
个人求职意向书
2015/05/11 职场文书
工程移交协议书
2016/03/24 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
Elasticsearch 数据类型及管理
2022/04/19 Python