php中$_GET,$_POST,$_REQUEST用法与区别分析

 更新时间:2016年11月25日 17:10  点击:1950
文章兴实例说明$_GET,$_POST,$_REQUEST的各处优点和不足以及它们三个的用法以实例说明,有需要的朋友可以参考一下。

1. $_REQUEST

默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。

 代码如下 复制代码

<?php

$_GET['foo'] = 'a';
$_POST['bar'] = 'b';
var_dump($_GET); // Element 'foo' is string(1) "a"
var_dump($_POST); // Element 'bar' is string(1) "b"
var_dump($_REQUEST); // Does not contain elements 'foo' or 'bar'

?>

注:它的速度比其它的要慢一些

2. $_GET

$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。

实例

 代码如下 复制代码

welcome.php?name=Peter&age=37

welcome.php" 文件现在可以通过 $_GET 变量来获取表单数据了(请注意,表单域的名称会自动成为 $_GET 数组中的 ID 键):

 代码如下 复制代码

Welcome <?php echo $_GET["name"]; ?>.<br />
You are <?php echo $_GET["age"]; ?> years old!

注:数据量不能过大最多只能100个字符或2kb

3. $_POST

$_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值。

$_POST 变量用于收集来自 method="post" 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。

 代码如下 复制代码

<form action="welcome.php" method="post">
Enter your name: <input type="text" name="name" />
Enter your age: <input type="text" name="age" />
<input type="submit" />
</form>

selcome.php文件

 代码如下 复制代码

Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old!

注:比get要好很多数据处理量大同时大多用于表单。


三区别在于$_REQUEST可以获取$_GET和$_post的数据,但是效率相对于前二者是要慢些,为什么慢我想大家用脚指都能想明白的,这里就留下大家思想吧。

本文章利用了php中的二个重要的目录操作函数,来实现遍历目录下的目录以及目录下的文件的实现方法,函数我们详细了介绍了,下面看实例
 代码如下 复制代码

<?php

function listFiles($path){
$result = array();
foreach(glob($path.'\'."*") as $item){
$result[strtolower($item)] = $item;
if(is_dir($item)){
$result += listFiles($item);
}
}
return $result;
}
$path = 'E:\web\dianle';
foreach(listFiles($path) as $item){
echo $item.'<br />';
}


function listFiles($path){
$result = array();
foreach( scandir($path) as $item ){
if($item != '.' && $item != '..' ){
$item = $path.'\'.$item;
$result[strtolower($item)] = $item;
if(is_dir($item)){
$result += listFiles($item);
}
}
}
return $result;
}
$path = 'E:\web\dianle';
foreach(listFiles($path) as $item){
echo $item.'<br />';
}
?>

 

用到的一个函数

scandir() 函数返回一个数组,其中包含指定路径中的文件和目录。

若成功,则返回一个数组,若失败,则返回 false。如果 directory 不是目录,则返回布尔值 false 并生成一条 E_WARNING 级的错误。

语法

scandir(directory,sort,context)

参数 描述
directory 必需。规定要扫描的目录。
sort 可选。规定排列顺序。默认是 0 (升序)。如果是 1,则为降序。
context 可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项

 

现在看另一个函数

glob() 函数返回匹配指定模式的文件名或目录。

该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。

语法

glob(pattern,flags)

参数 描述
file 必需。规定检索模式。
size

可选。规定特殊的设定。

  • GLOB_MARK - 在每个返回的项目中加一个斜线
  • GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
  • GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
  • GLOB_NOESCAPE - 反斜线不转义元字符
  • GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
  • GLOB_ONLYDIR - 仅返回与模式匹配的目录项
  • GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误

注释:GLOB_ERR 是 PHP 5.1 添加的

一篇关于php 入门的朋友参考的关于文件和目录的各种操作函数与实例应用,有需要的朋友可以简单的参考一下。

本章可以算是上一章的延续,介绍了除文件实际内容之外的附加信息,包括文件的大小、目录、访问权限等。文件系统中的某些函数只在服务器为特定的系统中时才有效,例如更改符号链接的函数symlink(),设定文件访问权限的函数chmod(),设定目录访问权限的函数umask()等等这些只在Linux系统中有效,在Windows系统中无效。PHP5以后提供的DirectoryIterator类也封装了很多实用的目录方面的操作

 代码如下 复制代码

//------------- 采用DirectoryIterator类迭代目录中的文件 -------------
foreach(new directoryIterator('/usr/local/images') as $file){
 print $file->getPathname()."n";
}

//------------- PHP5之前版本的实现方式 -------------
$d = opendir('/usr/local/images') or die($php_errormsg);
while(false !==($f = readdir($d))){
 print $f."n";
}

closedir($d);文件信息函数
函数名 函数提供什么文件信息?
file_exists() 该文件是否存在
fileatime() 最后访问时间
filectime() 文件inode的最后修改时间
filegroup() 取得文件组(返回整数)
fileinode() 取得文件的信息节点数(返回整数)
filemtime() 取得文件数据块最后被写入的时间(返回Unix时间戳)
fileowner() 取得文件的所有者(返回用户ID)
fileperms() 取得文件的权限
filesize() 取得文件大小的字节数
filetype() 取得文件类型,可能返回 fifo,char,dir,block,link,file 和 unknown
is_dir() 判断给定文件名是否是一个目录
is_executable() 判断给定文件名是否可执行(自PHP5.0.0起可用于Windows)
is_file() 判断给定文件名是否为一个正常的文件
is_link() 判断给定文件名是否为一个符号连接
is_readable() 判断给定文件名是否可读
is_writable() 判断给定文件名是否可写

目录相关函数
函数名 函数提供什么文件信息?
mkdir() 创建一个新目录,第二个参数可用来设置访问权限
rmdir() 删除目录
rename() 重命名一个文件或目录

目录类相关方法
DirectoryIterator类封装了很多与目录相关的方法

方法名 函数提供什么目录信息?
isDir() 判断给定的DirectoryIterator item对象是否是一个目录
isDot() 判断当前的DirectoryIterator item对象是否是‘.’或‘..’
isFile() 判断当前的DirectoryIterator item对象是否是一个有效的文件
isLink() 判断当前的DirectoryIterator item对象是否是一个连接
isReadable() 判断当前的DirectoryIterator item对象是否可读
isWritable() 判断当前的DirectoryIterator item对象是否可写
isExecutable() 判断当前的DirectoryIterator item对象是否可执行
getATime() 获取当前Iterator item最后访问时间
getCTime() 获取当前Iterator item最后修改时间
getMTime() 获取当前Iterator item文件数据块最后被写入的时间
getFilename() 获取当前Iterator item文件名(带扩展名)
getPathname() 获取当前Iterator item路径名
getPath() 获取当前Iterator item路径名和文件名
getGroup() 获取当前Iterator item组ID
getOwner() 获取当前Iterator item拥有者ID
getPerms() 获取当前Iterator item权限
getSize() 获取当前Iterator item文件大小
getType() 获取当前Iterator item类型,可能是file,link or dir
getInode() 获取当前Iterator item的inode节点号

文件时间戳解惑
touch()函数修改文件的更新时间

fileatime()函数返回文件因为读或写被打开的最后时间

filemtime()函数返回文件内容被修改的最后时间

filectime()函数返回文件内容或元数据被修改的最后时间

获取文件信息
通过stat()可以获取一个包含文件相关信息的数组,与此函数类似的是fstat()函数,这个函数以一个文件句柄作为参数(由fopen()或popen()返回),lstat()用来获取符号或文件连接的信息。

数字索引 字符串索引 说明
0 dev 设备号
1 ino 信息节点号
2 mode 保护模式
3 nlink 被连接数目
4 uid 所有者用户ID
5 gid 所在组ID
6 rdev 设备类型,如果是inode设备的话
7 size 文件大小的字节数
8 atime 上次访问的时间(Unix时间戳)
9 mtime 上次修改的时间(Unix时间戳)
10 ctime 上次改变的时间(Unix时间戳)
11 blksize 文件系统IO的块大小
12 blocks 所占据块的数目

修改文件权限
chmod()函数修改文件的权限

chown()函数修改文件的所有者

chgrp()函数修改文件所属组

注意:上述3个函数在Windows系统中无效
获取文件名各部分信息
basename()函数可以取得文件名,dirname()函数可以取得路径名,pathinfo()取得目录名、完整文件名、扩展名、文件名(即不带扩展名)的关联数组,键名分别是[dirname]、[basename]、[extension]、[filename]

常通过dirname(__FILE__)的组合来获取当前目录路径(物理路径,常用在引用其他PHP文件上)

删除文件
用unlink()函数可以删除一个文件,如果删除失败将产生一个E_WARNING错误

提示:PHP5.0.0后此函数也可以用来删除远程文件,如FTP等
复制或移动文件
使用copy(old_dir,new_dir)函数可以复制文件,使用rename(old_dir,new_dir)移动文件,这里的new_dir是可以可以重命名文件名的。

模式匹配文件名列表(模糊查询)
如果希望像命令行那样查询出某个目录中的所有jpg文件(*.jpg),可以使用DirectoryIterator类的FileterIterator子类accept()方法或者glob()函数获取匹配的文件名。

//FileterIterator的实现代码

 代码如下 复制代码

class ImageFilter extends FilterIterator {
    public function accept() {
        return preg_match('@.(gif|jpe?g|png)$@i',$this->current());
    }
}
foreach (new ImageFilter(new DirectoryIterator('/usr/local/images')) as $img) {
    print "

n";
}

//-------------- glob函数的实现代码 ------------

 代码如下 复制代码
foreach (glob('/usr/local/docs/*.txt') as $file) {
   $contents = file_get_contents($file);
   print "$file contains $contentsn";

}递归目录中的文件
如果想获得一个目录及其子目录的文件大小,可以使用RecursiveDirectoryIterator(提供子目录获取的功能)和RecursiveIteratorIterator(平整化)

 代码如下 复制代码

$dir = new RecursiveDirectoryIterator('/usr/local');
$totalSize = 0;
foreach (new RecursiveIteratorIterator($dir) as $file) {
    $totalSize += $file->getSize();
}
print "The total size is $totalSize.n";

在字符串中要获取得我们想要的图片地址是一件很容易的事情,这是相对于会正则表达式的朋友来说哈,下面我们来参考一下。

 

 代码如下 复制代码
<?php
$str='<p><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>';
$pattern="/<[img|IMG].*?src=['|"](.*?(?:[.gif|.jpg]))['|"].*?[/]?>/";
preg_match_all($pattern,$str,$match);print_r($match);
?>

结果显示:

 代码如下 复制代码

Array
(
    [0] => Array
        (
            [0] => <img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/>
        )

    [1] => Array
        (
            [0] => upfiles/2009/07/1246430143_1.jpg
        )

)

我们要做到给值就能快速的获取索引值的话,可以利用php array_values()函数,它可以快速简洁的帮我们找到想要的东西。下面我们来了解一下array_values() 函数的用法

array_keys() 函数返回包含数组中所有键名的一个新数组。

如果提供了第二个参数,则只返回键值为该值的键名。

如果 strict 参数指定为 true,则 PHP 会使用全等比较 (===) 来严格检查键值的数据类型。

语法
array_keys(array,value)参数 描述
array 必需。规定输入的数组。
value 可选。指定值的索引(键)。
strict 可选。与 value 参数一起使用。可能的值:

true - 根据类型返回带有指定值的键名。
false - 默认值。不依赖类型。
 

例子 1

 代码如下 复制代码

<?php
$a=array("a"=>"Horse","b"=>"Cat","c"=>"Dog");
print_r(array_keys($a));
?>

输出:

Array ( [0] => a [1] => b [2] => c )

例子 2
使用 value 参数:

 代码如下 复制代码

<?php
$a=array("a"=>"Horse","b"=>"Cat","c"=>"Dog");
print_r(array_keys($a,"Dog"));
?>

输出:

Array ( [0] => c)

例子 3
使用 strict 参数 (false):

 代码如下 复制代码

<?php
$a=array(10,20,30,"10");
print_r(array_keys($a,"10",false));
?>

输出:

Array ( [0] => 0 [1] => 3 )

例子 4
使用 strict 参数 (true):

 代码如下 复制代码

<?php
$a=array(10,20,30,"10");
print_r(array_keys($a,"10",true));
?>

输出:

Array ( [0] => 3)

[!--infotagslink--]

相关文章

  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • MYSQL事务回滚的2个问题分析

    因此,正确的原子操作是真正被执行过的。是物理执行。在当前事务中确实能看到插入的记录。最后只不过删除了。但是AUTO_INCREMENT不会应删除而改变值。1、为什么auto_increament没有回滚?因为innodb的auto_increament的...2014-05-31
  • C#中HttpWebRequest、WebClient、HttpClient的使用详解

    这篇文章主要介绍了C#中HttpWebRequest、WebClient、HttpClient的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Mysql索引会失效的几种情况分析

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 ...2014-06-07
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • python 爬取京东指定商品评论并进行情感分析

    本文主要讲述了利用Python网络爬虫对指定京东商城中指定商品下的用户评论进行爬取,对数据预处理操作后进行文本情感分析,感兴趣的朋友可以了解下...2021-05-28
  • Underscore源码分析

    Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象。这篇文章主要介绍了underscore源码分析相关知识,感兴趣的朋友一起学习吧...2016-01-02
  • 示例详解react中useState的用法

    useState 通过在函数组件里调用它来给组件添加一些内部 state,React 会在重复渲染时保留这个 state,接下来通过一个示例来看看怎么使用 useState吧...2021-06-04
  • python爬虫用request库处理cookie的实例讲解

    在本篇内容里小编给大家整理的是一篇关于python爬虫用request库处理cookie的实例讲解内容,有需要的朋友们可以学习参考下。...2021-02-21
  • Delphi常用关键字用法详解

    这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
  • 微信小程序 wx.request(object) API详解及实例代码

    这篇文章主要介绍了微信小程序 wx.request(object) API详解及实例代码的相关资料,需要的朋友可以参考下...2016-10-02
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • php中php://input的用法详细

    在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input。 下面的例子摘取的是wordpres...2016-11-25
  • Google会不会取消PR的理由分析

    Google是这样介绍PageRank的:   Google 出类拔萃的地方在于专注开发“完美的搜索引擎”,联合创始人拉里&middot;佩奇将这种搜索引擎定义为可“确解用户...2017-07-06
  • MySQL中的主键以及设置其自增的用法教程

    1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如: ALTER TABLE tbl_name ADD PRIMARY KEY (in...2015-11-24
  • c# HttpWebRequest通过代理服务器抓取网页内容应用介绍

    在C#项目开发过程中可能会有些特殊的需求比如:用HttpWebRequest通过代理服务器验证后抓取网页内容,要想实现此方法并不容易,本文整理了一下,有需求的朋友可以参考下...2020-06-25
  • C#中this的用法集锦

    本文给大家汇总介绍了C#中的几种this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码。...2020-06-25