[后端代码审计] 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 中定义的样式。以下是如何…...

MATLAB/Simulink 与Gazebo联合仿真
在机器人技术、自动化控制和仿真领域,MATLAB和Gazebo是两种常用的工具,它们各自具有不同的优势,但在某些情况下,可以联合使用以实现更复杂的仿真效果。下面将介绍如何在MATLAB环境中与Gazebo进行联合仿真。 MATLAB与Gazebo联合仿真的基础 MATLAB环境:MATLAB是一款强大的数…...

并查集-应用方向以及衍生汇总+代码实现(c++)-学习一个数据结构就会做三类大题!
并查集的核心功能,合并集合,查找元素,这两个最基本的功能相关题目本文不列举了,主要是一些和图相关的: 并查集的核心母题 一、连通性检测: 问题:判断在一个图中,任意两点是否连通。…...

设计模式六大原则-开放封闭原则(二)
开放封闭原则(Open-Closed Principle, OCP)是设计模式六大原则之一,也是面向对象设计(OOD)中的核心原则之一。它强调软件实体(如类、模块、函数等)应该对扩展开放,对修改封闭。这一原…...

C# 截取两个点之间的线段,等距分割线
//取线段上两点之间的沿线线段//line 线//startDist:距离线第一个点的起点位置//stopDist:距离线第一个点的终点位置public static List<double[]> lineSliceAlong(List<double[]> line, double startDist, double stopDist){double travelled 0;double overshot …...

打造聊天流式回复效果:Spring Boot+WebSocket + JS实战
本篇博客将带领你使用 Spring Boot、WebSocket 和 JavaScript 实现一个类似 ChatGPT 的流式回复效果。前端发送消息后,后端接收消息并请求 AI API,并将 AI 返回的流式响应实时推送到前端,最终在聊天界面呈现出逐字出现的打字效果。 技术原理…...

202年版最新Python下载安装+PyCharm下载安装激活和使用教程!(附安装包+激活码)
一、Python解释器下载【运行环境】 Python官网: https://www.python.org Python各版本解释器官网: https://www.python.org/downloads/ 二、Windows系统安装Python解释器 下载Python版本解释器 现在已经更新到了3.13版本的Python解释器,但…...

【面试宝典】spring常见面试题总结[上]
一、什么是 Spring 框架? Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。 Spring 帮助开发者解决基础性的问题,使开发者专注编写业务代码。 二、Spring Freamework 有哪些功能? IOC: 控制反转AOP: 面…...

NC单链表的排序
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一个节点…...

阿里云部署open-webui实现openai代理服务(持续更新)
一、展示 xiezhaoxuan.top:8080 二、 环境准备 1. 阿里云服务器,ubuntu22系统 2. http代理(可访问外网) 3. openai API Key 三、实际操作记录(阿里云服务器端) 1. 根据官方文档安装open-webui服务端(看完这节再操作): 🚀 Getting Started | Open WebUI 1. 如果服务器配置比较…...

Vue3简介和快速体验
文章目录 前言1. Vue3介绍2. Vue3快速体验(非工程化方式) 前言 本次主要用VScode开发代码,vscode的安装很简单,不会的可以查询一下网上的资料 1. Vue3介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于…...