[后端代码审计] 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 中定义的样式。以下是如何…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...