PHP获取地址栏URL函数

 更新时间:2016年11月25日 17:26  点击:2550
在php获取一个url地址我会使用到超级全局变量$_SERVER,他包括了各种参数获取,如HTTP_HOST、PHP_SELF、QUERY_STRING等等,这里就不介绍了。

PHP获取URL的几个函数介绍

 代码如下 复制代码

<?php
//获取域名或主机地址
echo $_SERVER['HTTP_HOST']."<br>";
//获取网页地址
echo $_SERVER['PHP_SELF']."<br>";
//获取网址参数
echo $_SERVER["QUERY_STRING"]."<br>";
//来源网页的详细地址
echo $_SERVER['HTTP_REFERER']."<br>";
?>

把上面的几个函数组合一下,即可得到完整的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();
?>

如果你的网页出现301或404对于用户体验来讲是一个非常严重的问题了,所以我们在做php header301或404时就必须小心再小心了,正同我来看看。

301跳转

 代码如下 复制代码

header('HTTP/1.1 301 Moved Permanently');  
header('Location: http://www.abc.com/aaa/');  
exit();

不要漏了header(‘HTTP/1.1 301 Moved Permanently’); 不然返回不了301

404错误页面

 代码如下 复制代码

header("HTTP/1.1 404 Not Found");

如果上面的不起作用,可以试试下面的:

 代码如下 复制代码

header("Status: 404 Not Found");

所以为了万无一失,可以两句都写上:

 代码如下 复制代码

header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");

小提示,

如果写好代码之后我们必须使用站长工具来测试一下返回的状态是不是我们想要的哦。

301跳转就是告诉访问者页面己经永远到了新的页面了,在php中使用301跳转我们利用header()函数发送301状态代码告诉浏览器,然后再实现页面跳转即可。

PHP纯代码跳转

 代码如下 复制代码

<?php
 header("Location:http://www.111cn.net/");
 ?>

但是这种返回的状态码是302

如果要实现301跳转的话,需要在之前设置下状态码

 代码如下 复制代码

<?php
 header( "HTTP/1.1 301 Moved Permanently" ) ;
 header("Location:http://www.111cn.net/");
 ?>


更简单的PHP跳转301代码

 代码如下 复制代码

<?php

$urlto='http://www.111cn.net/';
header('Location: '.$urlto, TRUE, 301);
?>

可能出现的问题

Warning: Cannot modify header information - headers already sent by把文件编码改成 UTF-8无BOM格式 可解决该问题,如果还是有问题,就检查下该代码前是否定义了字符串变量,删除这个变量再试试。

附:30*返回状态码的区别
301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:

1.301 redirect: 301 代表永久性转移(Permanently Moved),
2.302 redirect: 302 代表暂时性转移(Temporarily Moved ),

这两种转移在使用的时候有啥好处或者问题?

301 重定向是网页更改地址后对seo搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。

302 重定向是临时性转移。

 

php中移动复制文件我们使用copy,下面我们来看一个简单的实例,他实现了目录与目录文件移动,希望此文章对大家帮助。

方法一,copy+unlink方式

我的思路是:移动=新建+删除。在移动之前在目标的目录新建一个文件夹,然后在把文件和目录都复制过去,最后在执行删除.

 代码如下 复制代码

/**
 * @parammoveDir  剪切文件和目录
 * @param string $to 目标文件路径
 * @param string $from 源文件路径
 */
function moveDir($from,$to){
 if(!is_dir($from)){//判断$from源文件目录是不是存在
  return false;
 }

 $from = rtrim(str_replace(‘//’,'/’,$from), ‘/’);//为了在linux上兼容,我们把/符号全部转换成/因为windows下面2个符号都可以的.
 $files = scandir($from);//列出源文件目录的文件和文件夹,并且以数组的形式存入 $files。

/*

$files的输出结果:

Array ( [0] => . [1] => .. [2] => a [3] => b [4] => c [5] => dir [6] => dir.php [7] => dir2 [8] => dir2.php [9] => function_file.php [10] => homework.php )
可以看到scandir这个函数会输出2个多余的值: [0] => . [1] => ..在这对我们木有用.写一个if干掉他们。
*/
 foreach($files as $file){//对 $files数组进行遍历,方便对数组里面的文件夹和文件进行复制和删除.
  if(in_array($file, array(‘.’,’..’))){// array(‘.’,’..’)新建了一个只有.和..的数组,并且查找$file里面知否有.和..这2个值
   continue;
  }
  $subFrom = $from.’/’.$file;//把遍历后的文件夹或者文件名变成一个新的路径
     $subTo = $to.’/’.$file;

  if(is_dir($subFrom)){
   @mkdir($subTo);//判断$subFrom是不是一个目录,如果是目录就在目标的目录下面,新建一个目录
   moveDir($subFrom, $subTo);//递归执行新建目录。
  }else{//不是目录的话,就直接复制文件.复制完就删除文件.
   copy($subFrom, $subTo);
   unlink($subFrom);//删除所有文件
  }
  @rmdir($subFrom);//删除所有的目录
 }
 return true;
}
moveDir(‘C:/Users/Administrator/Desktop/0704′,’e:’);//在这传递你要移动的文件或者目录的地址

方法二,rename

1.对于文件,rename可以在不同盘符之间移动.

2.对于空文件夹,rename也可以在不同盘符之间移动.但是目标文件夹的父目录必须存在.

3.对于非空文件夹,只能在同一盘符下移动.不过,1和3,应该差不多能够对付所有的应用情况了.

 代码如下 复制代码


<?php
    rename("D:/testdir/test","F:/totestdir/mydir");
?>

对于一个40M的文件,copy+unlink方式需要7.6249899864197秒,而rename方式,只需要0.024738788604736,快300倍.

 代码如下 复制代码

<?php
//定义一个变量,保存文件名
$file = "html/cache.txt";
$rename = "html/renameCache.txt";
//使用rename()函数重命名一个文件
if(rename($file,$rename)==TRUE){
echo "重命名文件成功!";
}else{
echo "重命名文件失败!";
}
//使用rename()函数移动文件,并改名
rename("html/renameCache.txt","html/a/2.txt");
//使用rename()函数重命名目录
rename("html","cache");
//使用rename()函数移动目录到目标目录
rename("b","cache/b");
?>

这个文件下载实例做得非常的详细他是结合header函数与while fread函数把文件分断读出来然后再发送到客户端了,算得上一个标准的文件下载实例。

一个PHP文件下载的小实例
 /*======================================================
  $FileName 为文件名称,必传
  $FilePath 为文件路径.选填,可以为相对路径或者绝对路径
      路径只能由英文跟数据组成,不能带有中文
            如有问题 欢迎联系博主指出
 ======================================================*/

 代码如下 复制代码

<?php
 header("Content-type: text/html;charset=utf-8");
 if(strlen($FileName)<=3){echo "下载失败:你所以下载的文件信息有误";return;}
 $FileName=iconv("utf-8","gb2312",$FileName);//进行文件名格式转换,以防中文乱码
 //开始判断路径
 if(!is_null($FilePath)&&strlen($FilePath)>1){
 
  if(substr($FilePath,0,1)=='/'){//判断是否为绝对路径
 
   $FilePath=$_SERVER['DOCUMENT_ROOT'].$FilePath;
  
    }
  if(substr($FilePath,-1)!="/"){//检查最后是否为 / 结尾
 
   $FilePath=$FilePath.'/';
  
    }
  if(is_numeric(strpos($FilePath,":\"))){//检查是否为绝对路径
 
   $FilePath=str_replace("/","\",$FilePath);
  
    }
   }elseif(strlen($FilePath)==1&&$FilePath!="/"){
   
    $FilePath=$FilePath."/";
   
   }else{
   
    $FilePath="";
   
  }
  if(!file_exists($FilePath.$FileName)){
  
   echo"下载失败:所要下载的文件未找到";return;
  
   }
  /*================================================
   发送下载相关的头部信息
  =================================================*/
 
  header("Content-type: application/octet-stream");
 
  header("Accept-Ranges: bytes");//按照字节大小返回
 
  header("Accept-Length: $FileSize");//返回文件大小
 
  header("Content-Disposition: attachment; filename=".$FileName);//这里客户端的弹出对话框,对应的文件名
 
  /*================================================
   开始下载相关
  =================================================*/ 

$FileSize=filesize($FilePath.$FileName);
 
  $File=fopen($FilePath.$FileName,"r");//打开文件
 
  $FileBuff=512;
 
  while($FileSize>=0){
  
   $FileSize-=$FileBuff;
  
   echo fread($File,$FileBuff);
  
  }
  
  fclose($File);
 }

?>

总结

本下载实例并且支持中文文名了,在文件开头就进行了uft8编码转换了。

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25