当前位置: 首页 > news >正文

[后端代码审计] 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_recho相似,在输出布尔类型变量时,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)传递给当前脚本的变量的数组。
注意:该数组不仅仅对methodGET的请求生效,而是会针对所有带query string的请求。
$_POST当HTTP POST请求的Content-Typeapplication/x-www-form-urlencodedmultipart/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 查询参数 nameage 的值。

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.面试&#xff1a;请说下在单点Redis中面临哪些问题&#xff1a; 1.1.单点Redis的问题&#xff1a; 1.数据丢失问题&#xff1a;Redis是内存存储&#xff0c;服务重启可能会丢失数据 2.并发能力问题&#xff1a;单节点Redis并发能力虽然…...

数学建模--蒙特卡洛算法之电子管更换刀片寿命问题

目录 1.电子管问题重述 2.电子管问题分析 3.电子管问题求解 4.刀片问题重述 5.刀片问题分析 6.刀片问题求解 1.电子管问题重述 某设备上安装有4只型号规格完全相同的电子管&#xff0c;已知电子管寿命服从100&#xff5e;200h之间的均匀分布&#xff0e; 只要有一个电子管…...

如何解码Linux下事件响应工具evtest的时间戳

evtest介绍 这里放一下原文链接evtest工具介绍及安装 在开发input子系统驱动时&#xff0c;常常会使用evtest工具进行测试。evtest是打印evdev内核事件的工具&#xff0c;它直接从内核设备读取并打印设备描述的带有值和符号名的事件&#xff0c;可以用来调试鼠标、键盘、触摸…...

基于STM32开发的智能门禁系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 小区门禁管理企业办公门禁系统常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门禁系统通过整合多种身份识别技术&#xff0c;如密码输入、RFID刷卡、指…...

EasyExcel-高性能的 Java Excel 处理库

EasyExcel 是阿里巴巴开发的一个高性能的 Java Excel 处理库&#xff0c;主要用于处理大规模的 Excel 文件。它特别注重性能&#xff0c;优化了内存消耗&#xff0c;适合处理大数据量的 Excel 文件&#xff0c;避免了传统 Excel 库在处理大文件时的性能瓶颈。 主要功能 高性能…...

精益生产培训秘籍:六步策略,助力企业降本增效——张驰咨询

在当今竞争激烈的市场环境中&#xff0c;企业为了提高生产效率、降低成本、增强市场竞争力&#xff0c;纷纷引入精益生产理念。精益生产作为一种以客户需求为导向&#xff0c;通过持续消除浪费、优化流程、提升质量的生产方式&#xff0c;已成为众多企业转型升级的利器。张驰咨…...

【第19章】Spring Cloud之Gateway自定义Logback配置

文章目录 前言一、内置配置1. 关联依赖2. 内置配置 二、自定义配置1. 日志级别2. 彩色日志3. 自定义配置4. 增加打印语句5. 效果展示 总结 前言 网关层作为我们程序的主入口&#xff0c;有着至关重要的作用&#xff0c;下面我们通过自定义Logback配置增强网关层的日志输出&…...

Java流式编程

一、流的基础概念 流&#xff08;Stream&#xff09;&#xff1a; 定义&#xff1a;流是一种可以在数据集合上进行操作的抽象化序列&#xff0c;它没有存储数据的能力&#xff0c;而是通过一系列的操作来处理数据。特性&#xff1a; 无存储&#xff1a;流不存储数据&#xff0c…...

高可用集群keepalived从部署到实战一篇解决

目录 一.高可用集群 1.1 集群类型 1.2 系统可用性 1.3 系统故障 1.4 实现高可用 1.5.VRRP&#xff1a; 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 经济…...

警惕:手机被监听时会出现这些情况

在互联网高速发展的今天&#xff0c;手机已成为我们生活中不可或缺的一部分&#xff0c;它连接着我们的工作、学习与社交。然而&#xff0c;享受科技便利的同时&#xff0c;手机监听的风险也如影随形。 美国“斯诺登”事件曝光后&#xff0c;公众才惊觉手机监控可能就在身边。…...

Windows 系统下 MongoDB和PostgreSQL数据库数据的备份和恢复

MongoDB 数据库的备份和恢复 在 Windows 系统下进行 MongoDB 数据库的备份&#xff08;mongodump&#xff09;和恢复&#xff08;mongorestore&#xff09;操作相对直接。下面我将分别介绍这两个过程。 1. 备份数据库 (mongodump) 前提条件&#xff1a; 确保 MongoDB 服务正…...

必应Bing国内搜索广告开户收费标准公示

微软必应Bing作为全球领先的搜索引擎之一&#xff0c;其广告平台为企业提供了强大的营销工具和广泛的用户覆盖。云衔科技为广大企业提供全方位的广告开户及代运营服务&#xff0c;助力企业实现营销升级。 一、必应Bing国内搜索广告开户收费标准公示 根据最新政策&#xff0c;…...

大模型汇总:文心一言大模型、腾讯混元大模型、通义千问大模型、字节豆包大模型、智普清言大模型、KIMI 大模型、紫东太初大模型、讯飞星火大模型

文心一言大模型 作为百度自主研发的大型语言模型&#xff0c;具有显著的特点、广泛的应用场景以及独特的优势。以下是对文心一言特点、应用、优势的详细介绍&#xff1a; 特点&#xff1a;知识增强&#xff1a; 文心一言通过持续学习技术&#xff0c;不断吸收海量数据和知识…...

C语言——结构体、共用体、枚举、位运算

C语言——结构体、共用体、枚举、位运算 结构体共用体枚举位运算 结构体 如果将复杂的复杂的数据类型组织成一个组合项&#xff0c;在一个组合项中包含若干个类型不同&#xff08;当然也可以相同&#xff09;的数据项。 C语言允许用户自己指定这样一种数据结构&#xff0c;它称…...

[LitCTF 2024]exx

输入任意账号密码进行抓包 考查xxe漏洞 我们加入xxe语句并让它回显我们要它会显的东西&#xff1a;先来读取一下用户名和密码 我们可以看到&#xff0c;它已经读取了服务器下的账号密码文件&#xff0c;接着我们直接读取根目录下的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造数 示例&#xff1a;给topic为 ids-test 造数 ./kafka-console-produ…...

笔记:在WPF中OverridesDefaultStyle属性如何使用

一、目的&#xff1a;介绍下在WPF中OverridesDefaultStyle属性如何使用 OverridesDefaultStyle 属性在 WPF 中用于控制控件是否使用默认的主题样式。将其设置为 True 时&#xff0c;控件将不会应用默认的主题样式&#xff0c;而是完全依赖于你在 Style 中定义的样式。以下是如何…...

MATLAB/Simulink 与Gazebo联合仿真

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

并查集-应用方向以及衍生汇总+代码实现(c++)-学习一个数据结构就会做三类大题!

并查集的核心功能&#xff0c;合并集合&#xff0c;查找元素&#xff0c;这两个最基本的功能相关题目本文不列举了&#xff0c;主要是一些和图相关的&#xff1a; 并查集的核心母题 一、连通性检测&#xff1a; 问题&#xff1a;判断在一个图中&#xff0c;任意两点是否连通。…...

设计模式六大原则-开放封闭原则(二)

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

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 的流式回复效果。前端发送消息后&#xff0c;后端接收消息并请求 AI API&#xff0c;并将 AI 返回的流式响应实时推送到前端&#xff0c;最终在聊天界面呈现出逐字出现的打字效果。 技术原理…...

202年版最新Python下载安装+PyCharm下载安装激活和使用教程!(附安装包+激活码)

一、Python解释器下载【运行环境】 Python官网&#xff1a; https://www.python.org Python各版本解释器官网&#xff1a; https://www.python.org/downloads/ 二、Windows系统安装Python解释器 下载Python版本解释器 现在已经更新到了3.13版本的Python解释器&#xff0c;但…...

【面试宝典】spring常见面试题总结[上]

一、什么是 Spring 框架&#xff1f; Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。 Spring 帮助开发者解决基础性的问题&#xff0c;使开发者专注编写业务代码。 二、Spring Freamework 有哪些功能&#xff1f; IOC: 控制反转AOP: 面…...

NC单链表的排序

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

阿里云部署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开发代码&#xff0c;vscode的安装很简单&#xff0c;不会的可以查询一下网上的资料 1. Vue3介绍 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于…...