PHP学习全指南【小白入,超详细】
2026/7/27 9:06:43 网站建设 项目流程

2.3php学习

https://www.runoob.com/php/php-variables.html

2.3.1. php语法

2.3.1.1. 基础语法
  • PHP 脚本以<?php开始,以?>结束
<?php ?>
  • PHP 文件的默认文件扩展名是.php
  • PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码
  • 每条语句末尾要加;
  • 有两种在浏览器输出文本的基础指令:echoprint【注意区分,后面细说】
2.3.1.2. 注释

用途

推荐注释形式

示例

简单说明一行代码

//#

// 输出信息

说明一段代码块

/* ... */

用于逻辑分块的注释

函数/类文档说明

/** ... */DocBlock

用于描述参数、返回值、用途

2.3.2. php变量

变量是用于存储数据的容器

2.3.2.1.1.1. PHP 变量规则:
  • 变量以$符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
2.3.2.1. 创建(声明)变量
  • 变量在您第一次赋值给它的时候被创建
  • PHP 会根据变量的值,自动把变量转换为正确的数据类型【因为是弱类型】
<?php $txt="Hello world!"; $x=5; $y=10.5; ?>

当您赋一个文本值给变量时,请在文本值两侧加上引号

2.3.2.2. 变量作用域

变量的作用域是脚本中变量可被引用/使用的部分

PHP 有四种不同的变量作用域:

  • local
  • global
  • static
  • parameter

概念

PHP中的核心含义

作用域

local(局部变量)

函数/类方法内部声明的变量

仅当前函数/方法内部可访问,外部无法读取或修改

global(全局变量)

函数外部声明的变量,或在函数内用global

关键字修饰的变量

- 直接声明在函数外:默认整个脚本全局可访问<br>- 在函数内用global

修饰:可以引入函数外的同名全局变量到函数作用域内

static(静态变量)

在函数/类内部用static

关键字修饰的变量

和局部变量一致,仅函数/类内部可访问

parameter(参数变量)

函数定义时声明的输入参数,本质也是局部变量

仅当前函数内部可访问

补充:

【注意:全局与局部

【局部变量,只作用于该函数内】

【如果要在一个函数中访问一个全局变量,需要使用 global 关键字】

2.3.2.2.1. PHP global 关键字

在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:

2.3.2.2.2. Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

要做到这一点,请在您第一次声明变量时使用static关键字:

2.3.2.2.2.1. 栗子:

举一个普通局部变量和静态变量的对比

1. 普通局部变量

function countVisitor(){ $num = 0; // 普通局部变量 $num = $num + 1; echo "当前计数:".$num."<br>"; } // 连续调用3次 countVisitor(); countVisitor(); countVisitor();

输出结果:

当前计数:1 当前计数:1 当前计数:1

为什么每次都是1?因为普通局部变量$num

  • 每次调用函数都会重新创建、重新赋值为0
  • 函数运行完就销毁,根本不会保留上次的结果

2. 静态变量(点出核心区别)

把代码改成static

function countVisitor(){ static $num = 0; // 静态变量 $num = $num + 1; echo "当前计数:".$num."<br>"; } // 同样连续调用3次 countVisitor(); countVisitor(); countVisitor();

输出结果:

当前计数:1 当前计数:2 当前计数:3

这就是静态变量的核心特点:

只初始化一次,值会一直保留,整个脚本运行周期都不会销毁,下次调用会沿用上次修改后的值。

而且它还是局部变量:只有这个函数内部能访问它,外部改不了它,既保留了数据,又不会污染全局,非常适合做计数这类场景。

2.3.2.3. 参数作用域

【专门用来接收函数输入的局部变量】

参数是通过调用代码将值传递给函数的局部变量。

参数是在参数列表中声明的,作为函数声明的一部分:


外部不可访问、用完销毁,接收外部输入【前俩者局部变量也是】

2.3.3. PHP 5 echo 和 print 语句

2.3.3.1. echo 和 print 区别:

对比维度

echo

print

返回值

无返回值

总是固定返回整数1

参数数量

支持多个参数,用逗号分隔

仅支持1个参数

执行性能

略快(不需要处理返回值)

稍慢

表达式中使用

不可以

可以(因为有返回值)

2.3.3.2. 栗子
  1. 参数数量差异
// echo支持多参数输出 echo "Hello", " ", "World", "!"; // 正常输出:Hello World! // print只能传一个参数,这么写会报错 // print "Hello", "World"; // 语法错误 print "Hello World!"; // 正确写法
  1. 返回值和表达式用法差异
    因为print固定返回1,所以可以把它放在条件判断这类表达式里:
// 这种写法是合法的,print输出内容后返回1,条件恒成立 if (print "检查输出") { echo "会执行这里"; } // echo就不能这么用,语法直接报错

2.3.4. php数据类型

PHP 支持以下几种数据类型:

  • String(字符串)
  • Integer(整型)
  • Float(浮点型)
  • Boolean(布尔型)
  • Array(数组)
  • Object(对象)
  • NULL(空值)
  • Resource(资源类型)
2.3.4.1. php字符串

一个字符串是一串字符的序列,就像 "Hello world!"。

你可以将任何文本放在单引号和双引号中:

<?php $x = "Hello world!"; echo $x; echo "<br>"; $x = 'Hello world!'; echo $x; ?>
2.3.4.2. PHP 整型

整数是一个没有小数的数字。

整数规则:

  • 整数必须至少有一个数字 (0-9)
  • 整数不能包含逗号或空格
  • 整数是没有小数点的
  • 整数可以是正数或负数
  • 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。

【var_dump是输出这个变量的信息,如数值和数据类型】

2.3.4.3. PHP 浮点型

浮点数是带小数部分的数字,或是指数形式。

2.3.4.4. PHP 布尔型

布尔型可以是TRUEFALSE

布尔型通常用于条件判断

$x=true;
$y=false;

2.3.4.5. PHP 数组

数组可以在一个变量中存储多个值

<?php $cars=array("Volvo","BMW","Toyota"); var_dump($cars); ?>

结果,会具体写出长度5,类型string,数值“volvo”

2.3.4.6. PHP 对象

对象数据类型也可以用于存储数据。

在 PHP 中,对象必须声明。

首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。

然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:

<?php class Car { var $color; function __construct($color="green") { $this->color = $color; } function what_color() { return $this->color; } } ?>

以上实例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。

2.3.4.7. PHP NULL 值

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。

可以通过设置变量值为 NULL 来清空变量数据

<?php $x="Hello world!"; $x=null; var_dump($x); ?>
2.3.4.8. PHP 资源类型

PHP 资源resource是一种特殊变量,保存了到外部资源的一个引用。

常见资源数据类型有打开文件、数据库连接、图形画布区域等。

由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。

使用get_resource_type()函数可以返回资源(resource)类型:

get_resource_type(resource $handle): string

2.3.5. PHP 类型比较

虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。

  • 松散比较:使用两个等号==比较,只比较值,不比较类型。
  • 严格比较:用三个等号===比较,除了比较值,也比较类型。
2.3.5.1. 栗子
<?php if(42 == "42") { echo '1、值相等'; } echo PHP_EOL; // 换行符 if(42 === "42") { echo '2、类型相等'; } else { echo '3、类型不相等'; } ?>

结果:

1、值相等

3、类型不相等

2.3.5.2. PHP中 比较 0、false、null
<?php echo '0 == false: '; var_dump(0 == false); echo '0 === false: '; var_dump(0 === false); echo PHP_EOL; echo '0 == null: '; var_dump(0 == null); echo '0 === null: '; var_dump(0 === null); echo PHP_EOL; echo 'false == null: '; var_dump(false == null); echo 'false === null: '; var_dump(false === null); echo PHP_EOL; echo '"0" == false: '; var_dump("0" == false); echo '"0" === false: '; var_dump("0" === false); echo PHP_EOL; echo '"0" == null: '; var_dump("0" == null); echo '"0" === null: '; var_dump("0" === null); echo PHP_EOL; echo '"" == false: '; var_dump("" == false); echo '"" === false: '; var_dump("" === false); echo PHP_EOL; echo '"" == null: '; var_dump("" == null); echo '"" === null: '; var_dump("" === null);

结果:

0 == false: bool(true) 0 === false: bool(false) 0 == null: bool(true) 0 === null: bool(false) false == null: bool(true) false === null: bool(false) "0" == false: bool(true) "0" === false: bool(false) "0" == null: bool(false) "0" === null: bool(false) "" == false: bool(true) "" === false: bool(false) "" == null: bool(true) "" === null: bool(false)
2.3.5.3. 一些些

2.3.6. php常量

    • PHP 中的常量是指一旦定义后其值不能被改变的标识符。
    • 常量值被定义后,在脚本的其他任何地方都不能被改变。
    • 常量可以用define()函数或const关键字来定义。
    • 全局作用域: 常量在定义后,可以在整个脚本的任何地方使用,无需使用global关键字。

【在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字】

    • 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
2.3.6.1. 设置 PHP 常量【define

设置常量,使用define()函数,函数语法如下:

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

该函数有三个参数:

  • name必选参数,常量名称,即标志符。
  • value必选参数,常量的
  • case_insensitive:可选参数,如果设置为TRUE,该常量则大小写不敏感,默认是大小写敏感的。

栗子:

<?php // 区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com"); echo GREETING; // 输出 "欢迎访问 Runoob.com" echo '<br>'; echo greeting; // 输出 "greeting",但是有警告信息,表示该常量未定义 ?>
2.3.6.2. 设置PHP常量【const】

const CONSTANT_NAME = "value";

以下是一个使用 const 关键字定义常量的实例:

const SITE_URL = "https://www.runoob.com"; echo SITE_URL; // 输出 "https://www.runoob.com"
2.3.6.3. 预定义常量

PHP 提供了一些预定义常量,可以在脚本中直接使用

这些常量通常用于获取 PHP 的配置信息、版本信息等。常见的预定义常量有:

  • PHP_VERSION:当前 PHP 解析器的版本。
  • PHP_OS:服务器的操作系统。
  • PHP_INT_MAX最大的整数值
  • E_ERRORE_WARNINGE_PARSE等:错误报告级别。

【直接echo就行了,echoPHP_VERSION;// 输出 PHP 版本,例如 "7.4.1"

2.3.6.4. 常量数组

define是用的(“#”,[]); const是用的 #=[,];

2.4. php继续学习

PHP 变量 | 菜鸟教程

2.4.1. php if-else

2.4.2. lfelse语句

2.4.2.1. 条件语句
  • if 语句- 在条件成立时执行代码
  • if...else 语句- 在条件成立时执行一块代码,条件不成立时执行另一块代码
  • if...elseif....else 语句- 在若干条件之一成立时执行一个代码块
  • switch 语句- 在若干条件之一成立时执行一个代码块
2.4.2.2. 其实c语言里面已经讲过,简单带过

2.4.3. php switch语句

<?php switch (expression) { case value1: // 代码块1 break; case value2: // 代码块2 break; // 更多的 case 语句 default: // 如果没有匹配的值 } ?>
  • expression是要被比较的表达式。
  • case value:是可能的值,如果expression的值等于某个case的值,就执行相应的代码块。
  • break;用于终止switch语句,防止继续执行下一个case
  • default:是可选的,用于指定当没有匹配的case时执行的代码块。
2.4.3.1.1. 栗子
<?php $favcolor="red"; switch ($favcolor) { case "red": echo "你喜欢的颜色是红色!"; break; case "blue": echo "你喜欢的颜色是蓝色!"; break; case "green": echo "你喜欢的颜色是绿色!"; break; default: echo "你喜欢的颜色不是 红, 蓝, 或绿色!"; } ?>

2.4.4. php 数组

数组是一个能在单个变量中存储多个值的特殊变量。

  • 数值数组- 带有数字 ID 键的数组
  • 关联数组- 带有指定的键的数组,每个键关联一个值
  • 多维数组- 包含一个或多个数组的数组
2.4.4.1. 数值数组

自动从0开始计数,可以更加便捷地去表示这个位置内容数据

2.4.4.1.1. 获取长度

count($cars)

2.4.4.1.2. 遍历

使用For循环

2.4.4.2. 关联数组

指代,,

2.4.4.2.1. 遍历数组

2.4.4.2.1.1. 补充【使用函数foreach】
// 格式1:只获取元素值,不需要键名 foreach (要遍历的数组 as $当前元素值) { // 循环体逻辑 } // 格式2:同时获取元素的键和值 foreach (要遍历的数组 as $当前键名 => $当前元素值) { // 循环体逻辑 }

栗子:

$userInfo = [ "username" => "admin", "role" => "root", "id" => 1 ]; foreach ($userInfo as $key => $value) { echo "{$key}:{$value}<br>"; } // 输出: // username:admin // role:root // id:1
$userInfo = [ "username" => "admin", "role" => "root", "id" => 1 ]; // 只拿值,不拿键 foreach ($userInfo as $value) { echo "{$value}<br>"; } // 输出: // admin // root // 1 foreach ($userInfo as $key => $value) { echo "{$key}<br>"; } //输出 // username // role // id

2.4.5. php数组排序

  • sort()- 对数组进行升序排列
  • rsort()- 对数组进行降序排列
  • asort()- 根据关联数组的值,对数组进行升序排列
  • ksort()- 根据关联数组的键,对数组进行升序排列
  • arsort()- 根据关联数组的值,对数组进行降序排列
  • krsort()- 根据关联数组的键,对数组进行降序排列
2.4.5.1. sort(),rsort()

[0]=>2,,,[1]=>4

2.4.5.2. asort(),arsort(),ksort(),krsort()

a:是值,后面那个=> #

k:是键,前面那个 # =>

2.4.6. PHP 表单 - 验证邮件和URL

2.4.6.1.1. preg_match — 进行正则表达式匹配

int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )

参数

作用

说明

$pattern

正则规则

必填,必须是完整的正则表达式,需要用分隔符包裹(常用/

,例如/test/i

$subject

目标字符串

必填,要匹配的原始字符串

$matches

匹配结果

可选,存储匹配到的结果:$matches[0]是整个正则匹配到的内容,$matches[1]是第一个分组的结果,以此类推

$flags

标记位

可选,用来修改匹配行为,常用值:PREG_OFFSET_CAPTURE

会同时返回匹配结果在字符串中的偏移位置

匹配成功,输出=>1,对应内容,

!preg_match($pattern, $username)则是不符合,不匹配时进行的操作

符号

含义

作用

/

正则定界符

PHP正则必须用分隔符把规则包起来,常用/,只是语法要求,本身不匹配内容

^

匹配开头

代表必须从字符串的第一个字符就开始符合规则,不能在开头插入其他内容

\d

匹配数字

[0-9]一个意思,代表只能匹配0~9的阿拉伯数字

+

量词

代表前面的\d至少出现1次,不允许空字符串

$

匹配结尾

代表必须匹配到字符串的最后一个字符,不能在结尾留其他非数字内容

2.4.6.1.1.1. 例子1:获取URL中的参数值(CTF代码审计常考)

提取URL路径中/flag_xxxxxx格式的flag编号:

$url = "/api/flag_1a2b3c4d/get.php"; // 正则匹配flag_后面的任意字符 $pattern = '/flag_([a-zA-Z0-9]+)/'; preg_match($pattern, $url, $matches); echo "匹配到的flag:flag_" . $matches[1]; // 输出:匹配到的flag:flag_1a2b3c4d

2.4.6.1.1.2. 例子2:用户名正则校验(绕过场景)

场景:要求用户名只能是字母,不能包含特殊字符,且必须以字母开头:

$username = "admin123"; // 正则规则:开头到结尾只能是字母 $pattern = '/^[a-zA-Z]+$/'; if (!preg_match($pattern, $username)) { echo "用户名不合法,不能包含数字!";//匹配不成功 } else { echo "用户名合法"; } // 这里$username是admin123,输出:用户名不合法,不能包含数字!

对应PHP 5.2下的绕过例子:

如果正则要求必须只包含字母,但我们想插入攻击代码,可以用空字节截断绕过:

// 插入了\0(%00)截断,后面的攻击代码不会被检查 $username = "admin\0<?php eval($_GET[cmd]);?>"; $pattern = '/^[$/'; if (!preg_match($pattern, $username)) { echo "用户名不合法!"; } else { echo "用户名合法"; } // 在PHP 5.2中会输出"用户名合法",成功绕过正则检测

2.4.6.1.1.3. 例子3:WAF绕过(数组绕过)

a-zA-Z]+场景:WAF用preg_match检测POST参数中是否有eval等危险关键词:

// 服务端检测逻辑 if (preg_match('/eval|union|select/i', $_POST['content'])) { die("检测到恶意内容,已拦截");//匹配成功 } echo "请求通过"; // 绕过方法:把content传成数组,而不是字符串: // content[0]=test,此时preg_match匹配数组会直接返回false,WAF拦截不生效 // 最终会输出"请求通过",绕过成功

这也是你做Web渗透测试时非常实用的绕过技巧。

2.4.6.1. 验证 URL,邮箱,名称
<?php // 定义变量并默认设置为空值 $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "Name is required"; } else { $name = test_input($_POST["name"]); // 检测名字是否只包含字母跟空格 if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允许字母和空格"; } } if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); // 检测邮箱是否合法 if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { $emailErr = "非法邮箱格式"; } } if (empty($_POST["website"])) { $website = ""; } else { $website = test_input($_POST["website"]); // 检测 URL 地址是否合法 if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) { $websiteErr = "非法的 URL 的地址"; } } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "性别是必需的"; } else { $gender = test_input($_POST["gender"]); } } ?>

2.4.7. php 时间

string date ( string $format [, int $timestamp ] )

参数

描述

format

必需。规定时间戳的格式。

timestamp

可选。规定时间戳。默认是当前的日期和时间。

date() 函数的第一个必需参数format规定了如何格式化日期/时间。

format

字符

说明

返回值例子

---

---

d

月份中的第几天,有前导零的 2 位数字

0131

D

星期中的第几天,文本表示,3 个字母

MonSun

j

月份中的第几天,没有前导零

131

l("L"的小写字母)

星期几,完整的文本格式

SundaySaturday

N

ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加)

1(表示星期一)到7(表示星期天)

S

每月天数后面的英文后缀,2 个字符

stndrd或者th。可以和j一起用

w

星期中的第几天,数字表示

0(表示星期天)到6(表示星期六)

z

年份中的第几天

0365

星期

---

---

W

ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的)

例如:42(当年的第 42 周)

---

---

F

月份,完整的文本格式,例如 January 或者 March

JanuaryDecember

m

数字表示的月份,有前导零

0112

M

三个字母缩写表示的月份

JanDec

n

数字表示的月份,没有前导零

112

t

给定月份所应有的天数

2831

---

---

L

是否为闰年

如果是闰年为1,否则为0

o

ISO-8601 格式年份数字。这和Y的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加)

Examples:1999or2003

Y

4 位数字完整表示的年份

例如:19992003

y

2 位数字表示的年份

例如:9903

时间

---

---

a

小写的上午和下午值

ampm

A

大写的上午和下午值

AMPM

B

Swatch Internet 标准时

000999

g

小时,12 小时格式,没有前导零

112

G

小时,24 小时格式,没有前导零

023

h

小时,12 小时格式,有前导零

0112

H

小时,24 小时格式,有前导零

0023

i

有前导零的分钟数

0059>

s

秒数,有前导零

0059>

u

毫秒 (PHP 5.2.2 新加)。需要注意的是date()函数总是返回000000因为它只接受 integer 参数, 而 DateTime::format() 才支持毫秒。

示例:654321

时区

---

---

e

时区标识(PHP 5.1.0 新加)

例如:UTCGMTAtlantic/Azores

I

是否为夏令时

如果是夏令时为1,否则为0

O

与格林威治时间相差的小时数

例如:+0200

P

与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加)

例如:+02:00

T

本机所在的时区

例如:ESTMDT(【译者注】在 Windows 下为完整文本格式,例如"Eastern Standard Time",中文版会显示"中国标准时间")。

Z

时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。

-4320043200

完整的日期/时间

---

---

c

ISO 8601 格式的日期(PHP 5 新加)

2004-02-12T15:19:21+00:00

r

RFC 822 格式的日期

例如:Thu, 21 Dec 2000 16:01:07 +0200

U

从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数

参见 time()

2.4.8. php过滤器

2.1.8.1. 过滤器是什么

PHP 过滤器用于验证和过滤来自非安全来源的数据。

测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。

PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。

2.4.8.2. 函数和过滤器
  • filter_var()- 通过一个指定的过滤器来过滤单一的变量
  • filter_var_array()- 通过相同的或不同的过滤器来过滤多个变量
  • filter_input- 获取一个输入变量,并对它进行过滤
  • filter_input_array- 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
2.4.8.2.1. 栗子
  • FILTER_VALIDATE_INT:验证是否是整数,验证数字参数最常用
// 验证id是否是整数 $id = $_GET['id']; if(filter_var($id, FILTER_VALIDATE_INT)){ echo "合法参数"; }
  • FILTER_SANITIZE_STRING:过滤字符串,去除标签和特殊字符,用来防止XSS
  • FILTER_VALIDATE_URL:验证URL格式,代码题中经常用来考URL绕过【FILTER_VALIDATE_URL要求必须有http://协议头,我们可以通过在URL中嵌入@来绕过host验证,例如http://example.com@127.0.0.1,会被误认为访问example.com实际解析的是127.0.0.1,可以触发SSRF绕过。】
  • FILTER_VALIDATE_IP:验证IP地址格式
2.4.8.3. Validating 和 Sanitizing

有两种过滤器:

Validating 过滤器:

  • 用于验证用户输入
  • 严格的格式规则(比如 URL 或 E-Mail 验证)
  • 如果成功则返回预期的类型,如果失败则返回 FALSE

Sanitizing 过滤器:

  • 用于允许或禁止字符串中指定的字符
  • 无数据格式规则
  • 始终返回字符串验证输入
  • 第一段:FILTER_VALIDATE_EMAIL
    • 属于验证类过滤器:只做格式验证,返回结果是true(合法) 或false(非法),不会修改你的原始输入。
  • 第二段:FILTER_SANITIZE_URL
    • 属于净化类过滤器:会直接修改输入内容,自动删除URL中不允许的特殊字符(比如空格、非ASCII字符、#、<>这些符号),返回处理后的干净字符串。
2.4.8.4. 验证输入
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("没有 email 参数"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "不是一个合法的 E-Mail"; } else { echo "是一个合法的 E-Mail"; } } ?>

上面的实例有一个通过 "GET" 方法传送的输入变量 (email):

  1. 检测是否存在 "GET" 类型的 "email" 输入变量
  2. 如果存在输入变量,检测它是否是有效的 e-mail 地址

2.4.8.5. 净化输入
<?php if(!filter_has_var(INPUT_GET, "url")) { echo("没有 url 参数"); } else { $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url; } ?>

上面的实例有一个通过 "GET" 方法传送的输入变量 (url):

  1. 检测是否存在 "GET" 类型的 "url" 输入变量
  2. 如果存在此输入变量,对其进行净化(删除非法字符),并将其存储在 $url 变量中

2.4.8.6. 过滤多个输入
<?php $filters = array ( // name字段:使用FILTER_SANITIZE_STRING净化 "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), // age字段:验证是否是整数,同时限制范围1-120 "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), // email字段:直接验证邮箱格式 "email"=> FILTER_VALIDATE_EMAIL ); $result = filter_input_array(INPUT_GET, $filters); //一次性从INPUT_GET(也就是URL参数)中获取三个参数, //按照上面定义的规则分别过滤,结果会按字段名存回到$result数组中。 if (!$result["age"]) { echo("年龄必须在 1 到 120 之间。<br>"); } elseif(!$result["email"]) { echo("E-Mail 不合法<br>"); } else { echo("输入正确"); } ?>

filter_input_array()函数的第二个参数可以是数组单一过滤器的 ID

如果该参数是单一过滤器的 ID,那么这个指定的过滤器会过滤输入数组中所有的值。

如果该参数是一个数组,那么此数组必须遵循下面的规则:

  • 必须是一个关联数组,其中包含的输入变量是数组的键(比如 "age" 输入变量)
  • 此数组的值必须是过滤器的 ID ,或者是规定了过滤器、标志和选项的数组
2.4.8.7. 使用 Filter Callback

通过使用FILTER_CALLBACK过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询