[后端代码审计] PHP 数组知识汇总
文章目录
- 前言
- 1. 数组基础
- 1.1 数组概念
- 1.2 索引数组
- 1.3 关联数组
- 1.4 多维数组
- 2. 数组函数
- 2.1 `count()`
- 2.2 `array_merge()`
- 2.3 `array_keys()`
- 2.4 `array_values()`
- 2.5 `in_array()`
- 3. 数组遍历
- 3.1 for循环遍历
- 3.2 foreach遍历
- 3.3 遍历索引数组
- 3.4 遍历关联数组
- 4. 数组排序
- 4.1 `sort()`
- 4.2 `asort()`
- 4.3 `ksort()`
- 5. 预定义超全局数组变量
- 5.1 概述
- 5.2 `$_GET`
- 5.3 `$_POST`
- 5.4 `$_REQUEST`
- 5.5 `$_SERVER`
- 5.6 `$_SESSION`
- 5.7 `$_COOKIE`
- 5.8 `$_FILES`
- 5.9 `$_ENV`
前言
PHP(Hypertext Preprocessor)是一种开源的脚本语言,主要用于Web开发,特别是服务器端编程。是学习网络安全需要掌握的一门语言。
PHP数组是一种数据结构,用于存储一系列有序的数据,可以包含各种类型的值,如数字、字符串、布尔值、甚至是其他数组。
1. 数组基础
1.1 数组概念
数组是一种数据结构,可以存储多个值。在 PHP 中,数组可以分为索引数组和关联数组。下面是数组的特点:
- 使用键值对的方式来存储数据。
- 键(key):变量的编号;值(value):变量的值。
- 数组中的元素可以是任意类型的数据对象。
1.2 索引数组
定义: 索引数组使用整数索引来访问元素。索引从 0 开始,依次递增。
示例:
假设你要保存班级的学生姓名:
$students = array("张三", "李四", "王五");
echo $students[0]; // 输出 "张三"
解释: $students[0] 访问数组中第一个元素“张三”。
另一种创建索引数组的方法:
$students = ["张三", "李四", "王五"];
1.3 关联数组
定义: 关联数组使用字符串键来访问元素。
示例:
假设你要保存一个人的信息,如姓名、年龄和城市:
$person = array("name" => "李华","age" => 28,"city" => "上海"
);
echo $person["name"]; // 输出 "李华"
解释: $person["name"] 访问关联数组中键为“name”的值“李华”。
另一种创建关联数组的方法:
$person = ["name" => "李华","age" => 28,"city" => "上海"
];
1.4 多维数组
数组中的元素可以是任何类型的数据,数组中的元素也可以是数组。
示例:
假设有一个班级,里面有四个学生用户。
$ns_class = array($stu1,$stu2,$stu3,$stu4);echo "<pre>";
print_r($ns_class);
解释:print_r与echo相似,在输出布尔类型变量时,True为1,False无。
2. 数组函数
2.1 count()
功能: 返回数组中元素的数量。
示例:
$fruits = ["苹果", "香蕉", "橙子"];
echo count($fruits); // 输出 3
解释: count($fruits) 返回数组 $fruits 中的元素数量,即 3。
2.2 array_merge()
功能: 合并两个或多个数组。
示例:
$array1 = ["a", "b"];
$array2 = ["c", "d"];
$result = array_merge($array1, $array2);
print_r($result); // 输出 Array ( [0] => a [1] => b [2] => c [3] => d )
解释: array_merge() 合并了 $array1 和 $array2,结果是一个包含所有元素的新数组。
2.3 array_keys()
功能: 返回数组中所有的键。
示例:
$person = ["name" => "李华","age" => 28,"city" => "上海"
];
$keys = array_keys($person);
print_r($keys); // 输出 Array ( [0] => name [1] => age [2] => city )
解释: array_keys($person) 返回关联数组 $person 中所有的键。
2.4 array_values()
功能: 返回数组中所有的值。
示例:
$values = array_values($person);
print_r($values); // 输出 Array ( [0] => 李华 [1] => 28 [2] => 上海 )
解释: array_values($person) 返回关联数组 $person 中所有的值。
2.5 in_array()
功能: 检查数组中是否存在某个值。
示例:
$fruits = ["苹果", "香蕉", "橙子"];
if (in_array("香蕉", $fruits)) {echo "香蕉存在于数组中";
}
解释: in_array("香蕉", $fruits) 检查“香蕉”是否存在于 $fruits 数组中,如果存在,输出相关信息。
3. 数组遍历
3.1 for循环遍历
使用for循环可以遍历数组,但是这种方法依赖于数组中key自然数规律,具有局限性,只能遍历索引数组。
示例:
for($a = 0;$a < count($word); $a++){echo $word[$a]."<br />";
}
3.2 foreach遍历
foreach是专门用来遍历数组的,foreach是一种循环,不需要额外的计时器。
示例:
foreach($variable as $key => $value){#执行代码
}
3.3 遍历索引数组
示例:
$fruits = ["苹果", "香蕉", "橙子"];
foreach ($fruits as $fruit) {echo $fruit . "<br>";
}
解释: foreach 循环遍历索引数组 $fruits 的每个元素,并逐一输出。
3.4 遍历关联数组
示例:
$person = ["name" => "李华","age" => 28,"city" => "上海"
];
foreach ($person as $key => $value) {echo "$key: $value<br>";
}
解释: foreach 循环遍历关联数组 $person 的每个键值对,输出键和值。
4. 数组排序
4.1 sort()
功能: 对索引数组进行升序排序。
示例:
$numbers = [3, 1, 4, 1, 5];
sort($numbers);
print_r($numbers); // 输出 Array ( [0] => 1 [1] => 1 [2] => 3 [3] => 4 [4] => 5 )
解释: sort() 函数对 $numbers 数组进行升序排序。
4.2 asort()
功能: 对关联数组进行升序排序,保持键值关系。
示例:
$person = ["John" => 25,"Doe" => 30,"Jane" => 22
];
asort($person);
print_r($person); // 输出 Array ( [Jane] => 22 [John] => 25 [Doe] => 30 )
解释: asort() 对 $person 数组按值升序排序,但保持键值对关系。
4.3 ksort()
功能: 按键对关联数组进行升序排序。
示例:
$person = ["John" => 25,"Doe" => 30,"Jane" => 22
];
ksort($person);
print_r($person); // 输出 Array ( [Doe] => 30 [Jane] => 22 [John] => 25 )
解释: ksort() 对 $person 数组按键升序排序。
5. 预定义超全局数组变量
5.1 概述
预定义:PHP已经定义好的,已经存在的,可以直接拿来使用。
超全局:超级全局变量,作用域是超全局,可以在脚本的任何地方访问和使用,包括函数内部和外部,这些数组在整个脚本中都可以访问,无需通过 global 关键字。
| 数组 | 作用 |
|---|---|
| $_GET | 通过URL参数(query string)传递给当前脚本的变量的数组。 注意:该数组不仅仅对 method为GET的请求生效,而是会针对所有带query string的请求。 |
| $_POST | 当HTTP POST请求的Content-Type是application/x-www-form-urlencoded或multipart/form-data时,会将变量以关联数组形式传入当前脚本。 |
| $GLOBALS | 关联数组array,包含当前脚本定义成全局范围的所有变量的引用。数组的键就是变量的名字。 |
| $_SERVER | 服务器和执行环境信息 |
| $_FILES | 通过HTTP POST方式上传到当前脚本的项目的数组。 |
| $_COOKIE | 通过HTTP Cookies方式传递给当前脚本的变量的数组。 |
| $_SESSION | 当前脚本可用SESSION变量的数组。 |
| $_REQUEST | 默认情况下包含了$_GET、$_POST和$_COOKIE数组。 |
5.2 $_GET
功能: 存储通过 URL 传递的查询参数,GET传参的参数名做数组的key,参数值做数组的value。
示例:
假设你有一个 URL,如 example.com/index.php?name=张三&age=28。
// index.php
echo $_GET['name']; // 输出 "张三"
echo $_GET['age']; // 输出 "28"
解释: $_GET 数组获取 URL 查询参数 name 和 age 的值。
5.3 $_POST
功能: 存储通过 POST 请求提交的数据。
示例:
假设你有一个 HTML 表单:
<form method="post" action="process.php"><input type="text" name="username" value="张三"><input type="submit" value="提交">
</form>
在 process.php 中,你可以这样处理:
// process.php
echo $_POST['username']; // 输出 "张三"
解释: $_POST 数组获取表单字段 username 的值。
5.4 $_REQUEST
功能: 存储 $_GET、$_POST 和 $_COOKIE 中的所有数据。
但是$_REQUEST在接收参数的时候,会受到一个PHP选项的控制。
示例:
// URL: example.com/index.php?name=张三
// Form: <form method="post" action="index.php"><input type="text" name="age" value="28"><input type="submit"></form>echo $_REQUEST['name']; // 输出 "张三" (从 URL 获取)
echo $_REQUEST['age']; // 输出 "28" (从表单获取)
解释: $_REQUEST 综合了 $_GET、$_POST 和 $_COOKIE 的数据。
5.5 $_SERVER
功能: 提供服务器和执行环境的信息。
示例:
echo $_SERVER['HTTP_USER_AGENT']; // 输出用户的浏览器信息
echo $_SERVER['REQUEST_METHOD']; // 输出请求方法 (例如 "GET" 或 "POST")
解释: $_SERVER 包含有关服务器和客户端环境的信息。
5.6 $_SESSION
功能: 存储会话级别的数据,通常用于用户认证和其他会话相关信息。
示例:
// 开始会话
session_start();
$_SESSION['username'] = '张三';// 访问会话数据
echo $_SESSION['username']; // 输出 "张三"
解释: $_SESSION 用于存储和获取会话中的数据。
5.7 $_COOKIE
功能: 存储客户端发送的 cookies 数据。
示例:
// 设置 cookie
setcookie('user', '张三', time() + 3600);// 访问 cookie
echo $_COOKIE['user']; // 输出 "张三"
解释: $_COOKIE 获取客户端发送的 cookie 数据。
补充:
Cookie过程:为了保持HTTP会话的状态性。
- 用户提交账密
- 服务器进行身份认证
- 下发身份证,下发Cookie
- 浏览器客户端所有的请求都会携带身份信息,携带Cookie信息。
5.8 $_FILES
功能: 存储上传的文件信息。
示例:
假设你有一个文件上传表单:
<form method="post" enctype="multipart/form-data" action="upload.php"><input type="file" name="fileToUpload"><input type="submit" value="上传">
</form>
在 upload.php 中,你可以这样处理上传的文件:
// upload.php
if ($_FILES['fileToUpload']['error'] === UPLOAD_ERR_OK) {echo "文件名: " . $_FILES['fileToUpload']['name'];echo "文件类型: " . $_FILES['fileToUpload']['type'];echo "文件大小: " . $_FILES['fileToUpload']['size'] . " bytes";
}
解释: $_FILES 数组包含上传文件的各种信息,例如文件名、类型和大小。
相关参数:
| 变量 | 含义 |
|---|---|
| $_FILES[‘uploaded’] | 用来保存文件上传的信息 |
| $_FILES[‘uploaded’] [‘name’] | 上传文件的名字 |
| $_FILES[‘uploaded’] [‘type’] | 上传文件的类型 |
| $_FILES[‘uploaded’] [‘type_name’] | 上传文件存储在服务器中的缓存路径 |
| $_FILES[‘uploaded’] [‘error’] | 错误代码 |
| $_FILES[‘uploaded’] [‘size’] | 上传文件的大小 |
$_FILES中存储的与上传文件有关的信息,不是文件本身,文件内容在缓存路径中。
正常完成文件上传功能,需要将文件从缓存拷贝到服务器文件系统中。
5.9 $_ENV
功能: 存储环境变量。
示例:
echo $_ENV['PATH']; // 输出环境变量 PATH 的值
解释: $_ENV 提供访问服务器环境变量的方法。
相关文章:
[后端代码审计] PHP 数组知识汇总
文章目录 前言1. 数组基础1.1 数组概念1.2 索引数组1.3 关联数组1.4 多维数组 2. 数组函数2.1 count()2.2 array_merge()2.3 array_keys()2.4 array_values()2.5 in_array() 3. 数组遍历3.1 for循环遍历3.2 foreach遍历3.3 遍历索引数组3.4 遍历关联数组 4. 数组排序4.1 sort()…...
单点Redis中面临哪些问题
我的后端学习大纲 我的Redis学习大纲 1.面试:请说下在单点Redis中面临哪些问题: 1.1.单点Redis的问题: 1.数据丢失问题:Redis是内存存储,服务重启可能会丢失数据 2.并发能力问题:单节点Redis并发能力虽然…...
数学建模--蒙特卡洛算法之电子管更换刀片寿命问题
目录 1.电子管问题重述 2.电子管问题分析 3.电子管问题求解 4.刀片问题重述 5.刀片问题分析 6.刀片问题求解 1.电子管问题重述 某设备上安装有4只型号规格完全相同的电子管,已知电子管寿命服从100~200h之间的均匀分布. 只要有一个电子管…...
如何解码Linux下事件响应工具evtest的时间戳
evtest介绍 这里放一下原文链接evtest工具介绍及安装 在开发input子系统驱动时,常常会使用evtest工具进行测试。evtest是打印evdev内核事件的工具,它直接从内核设备读取并打印设备描述的带有值和符号名的事件,可以用来调试鼠标、键盘、触摸…...
基于STM32开发的智能门禁系统
目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 小区门禁管理企业办公门禁系统常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门禁系统通过整合多种身份识别技术,如密码输入、RFID刷卡、指…...
EasyExcel-高性能的 Java Excel 处理库
EasyExcel 是阿里巴巴开发的一个高性能的 Java Excel 处理库,主要用于处理大规模的 Excel 文件。它特别注重性能,优化了内存消耗,适合处理大数据量的 Excel 文件,避免了传统 Excel 库在处理大文件时的性能瓶颈。 主要功能 高性能…...
精益生产培训秘籍:六步策略,助力企业降本增效——张驰咨询
在当今竞争激烈的市场环境中,企业为了提高生产效率、降低成本、增强市场竞争力,纷纷引入精益生产理念。精益生产作为一种以客户需求为导向,通过持续消除浪费、优化流程、提升质量的生产方式,已成为众多企业转型升级的利器。张驰咨…...
【第19章】Spring Cloud之Gateway自定义Logback配置
文章目录 前言一、内置配置1. 关联依赖2. 内置配置 二、自定义配置1. 日志级别2. 彩色日志3. 自定义配置4. 增加打印语句5. 效果展示 总结 前言 网关层作为我们程序的主入口,有着至关重要的作用,下面我们通过自定义Logback配置增强网关层的日志输出&…...
Java流式编程
一、流的基础概念 流(Stream): 定义:流是一种可以在数据集合上进行操作的抽象化序列,它没有存储数据的能力,而是通过一系列的操作来处理数据。特性: 无存储:流不存储数据,…...
高可用集群keepalived从部署到实战一篇解决
目录 一.高可用集群 1.1 集群类型 1.2 系统可用性 1.3 系统故障 1.4 实现高可用 1.5.VRRP: 1.5.1 VRRP 相关术语 1.5.2 VRRP 相关技术 二.Keepalived 部署 2.1 keepalived 简介 2.2keepalived架构 2.3 Keepalived 环境准备 2.4 Keepalived 相关文件 2.…...
22222222222
222222222222222222...
springboot宠物相亲平台-计算机毕业设计源码16285
目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…...
警惕:手机被监听时会出现这些情况
在互联网高速发展的今天,手机已成为我们生活中不可或缺的一部分,它连接着我们的工作、学习与社交。然而,享受科技便利的同时,手机监听的风险也如影随形。 美国“斯诺登”事件曝光后,公众才惊觉手机监控可能就在身边。…...
Windows 系统下 MongoDB和PostgreSQL数据库数据的备份和恢复
MongoDB 数据库的备份和恢复 在 Windows 系统下进行 MongoDB 数据库的备份(mongodump)和恢复(mongorestore)操作相对直接。下面我将分别介绍这两个过程。 1. 备份数据库 (mongodump) 前提条件: 确保 MongoDB 服务正…...
必应Bing国内搜索广告开户收费标准公示
微软必应Bing作为全球领先的搜索引擎之一,其广告平台为企业提供了强大的营销工具和广泛的用户覆盖。云衔科技为广大企业提供全方位的广告开户及代运营服务,助力企业实现营销升级。 一、必应Bing国内搜索广告开户收费标准公示 根据最新政策,…...
大模型汇总:文心一言大模型、腾讯混元大模型、通义千问大模型、字节豆包大模型、智普清言大模型、KIMI 大模型、紫东太初大模型、讯飞星火大模型
文心一言大模型 作为百度自主研发的大型语言模型,具有显著的特点、广泛的应用场景以及独特的优势。以下是对文心一言特点、应用、优势的详细介绍: 特点:知识增强: 文心一言通过持续学习技术,不断吸收海量数据和知识…...
C语言——结构体、共用体、枚举、位运算
C语言——结构体、共用体、枚举、位运算 结构体共用体枚举位运算 结构体 如果将复杂的复杂的数据类型组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。 C语言允许用户自己指定这样一种数据结构,它称…...
[LitCTF 2024]exx
输入任意账号密码进行抓包 考查xxe漏洞 我们加入xxe语句并让它回显我们要它会显的东西:先来读取一下用户名和密码 我们可以看到,它已经读取了服务器下的账号密码文件,接着我们直接读取根目录下的flag文件。通常情况下flag文件的位置一般就根…...
kafka运维常用命令
KAFKA常用命令 一、KAFKA常用命令1.1kafka造数1.2kafla抓包1.2.1实时查看kafka数据1.2.2查看kafka历史数据1.2.3查看kafka中带有某个ip的历史数据1.2.4将kafka数据存入文件中 一、KAFKA常用命令 1.1kafka造数 示例:给topic为 ids-test 造数 ./kafka-console-produ…...
笔记:在WPF中OverridesDefaultStyle属性如何使用
一、目的:介绍下在WPF中OverridesDefaultStyle属性如何使用 OverridesDefaultStyle 属性在 WPF 中用于控制控件是否使用默认的主题样式。将其设置为 True 时,控件将不会应用默认的主题样式,而是完全依赖于你在 Style 中定义的样式。以下是如何…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...
scan_mode设计原则
scan_mode设计原则 在进行mtp controller设计时,基本功能设计完成后,需要设计scan_mode设计。 1、在进行scan_mode设计时,需要保证mtp处于standby模式,不会有擦写、编程动作。 2、只需要固定mtp datasheet说明的接口即可…...
fast-reid部署
配置设置: 官方库链接: https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安装依赖: pip install -r docs/requirements.txt 编译:切换到fastreid/evaluation/rank_cylib目录下&a…...
