php基础:常见函数

内建函数

文章目录

  • 内建函数
    • 1、文件操作函数:
    • 2、代码执行函数:
    • 3、反序列化函数:
    • 4、数据库操作函数:
    • 5、类型转换与比较函数:
    • 6、其他常见函数:

1、文件操作函数:

  • include(): 导入并执行指定的 PHP 文件。例如:include('config.php'); 会导入并执行 config.php 文件中的代码。

  • require(): 类似于 include(),但如果文件不存在,则会产生致命错误。

  • include_once(), require_once(): 与 includerequire 类似,但只导入文件一次。

  • fopen(): 打开一个文件或 URL。例如:$file = fopen("test.txt", "r"); 会以只读模式打开 test.txt

  • file_get_contents(): 读取文件的全部内容到一个字符串。例如:$content = file_get_contents("test.txt");

  • file_put_contents(): 将一个字符串写入文件。例如:file_put_contents("test.txt", "Hello World!");

2、代码执行函数:

  • system():执行外部程序并显示输出。可能被用于执行系统命令。

  • exec():执行一个外部程序。返回命令执行结果的最后一行。如exec("ls -la")可列出当前目录的详细内容。

  • shell_exec():通过 shell 环境执行命令,并将完整的输出以字符串的形式返回。例如shell_exec("cat /etc/passwd")可读取系统密码文件。

  • passthru():执行外部程序并显示原始输出。如passthru("uname -a")可显示系统信息。

  • eval(): 执行字符串中的 PHP 代码。例如:eval('$x = 5;'); 会设置变量 $x 的值为 5。

3、反序列化函数:

  • unserialize():从已存储的表示中创建 PHP 的值。

  • serialize():生成值的可存储表示。通常与unserialize配合使用。

4、数据库操作函数:

  • mysql_query():执行一条 MySQL 查询。例如mysql_query("SELECT * FROM users WHERE username = '$_GET[username]'")
  • mysqli_query():执行一条 MySQL 查询。与mysql_query类似,但支持 MySQLi 扩展。如mysqli_query($conn, "SELECT * FROM users")可查询用户表。
  • PDO::query():执行一条 SQL 语句。使用 PDO 预处理语句可有效防止 SQL 注入。例如$pdo->query("SELECT * FROM users")可查询用户表。
  • mysql_fetch_array():从结果集中取得一行作为关联数组或数字数组。如$row = mysql_fetch_array($result)可获取查询结果。

5、类型转换与比较函数:

  • is_numeric():检查变量是否为数字或数字字符串。is_numeric("123")trueis_numeric("123a")falseis_numeric("1e3%26cat")true"1e3" → 1000,是合法数字开头,后面内容被忽略,此方法用于绕过)。

    //绕过
    is_numeric() 要求字符串必须以数字、正负号(+/-)或小数点开头。
    结尾加空白符(%0a、%0b、%0c、%0d、%09)如果出现在字符串结尾,is_numeric() 会忽略它们并返回 true(只要前面是合法数字)。例如 "123%0a" 解码后是 "123\n",is_numeric() 会忽略 \n,只检查 "123"。科学计数法(如 "1e3")即使包含 e 或 E,is_numeric() 仍返回 true,但中间不能有空白符例如 "1e%0a3" 会返回 false(因为 e 和 3 被换行符隔开)。//说明%0a → 换行符(\n)%0b → 垂直制表符(\v)%0c → 换页符(\f)%0d → 回车符(\r)%09 → 水平制表符(\t)
    
    //示例
    $input = $_GET['num'];
    if (is_numeric($input)) {system("echo " . (int)$input);
    } else {die("Invalid input!");
    }//payload
    num=1e2&cat+/etc/passwd注入失败,&符号被URL解析为参数分隔符,导致失败,PHP解析为:$_GET['num'] = "1e3"$_GET['cat'] = "/etc/passwd"(但代码未使用该参数,不影响逻辑)num=1e2%23cat+/etc/passwd$_GET['num'] = "1e3&cat+/etc/passwd"	is_numeric("1e3&cat+/etc/passwd"),开头 "1e3" 是合法数字 → 返回 true。(int)"1e3&cat+/etc/passwd"转换时遇到 & 停止,取 1(因为 e 不是数字字符)system()执行 → echo 1&cat+/etc/passwd实现代码注入
    
  • strcmp():比较两个字符串(区分大小写)。strcmp("a", "b")-1strcmp("b", "a")1strcmp("a", "a")0;若参数非字符串(如传入数组),返回NULL

    //绕过
    strcmp()要求参数必须是字符串类型。传入数组类型时(如$_GET['pass']=array()),函数返回NULL。在弱类型比较(==)时,NULL == 0 成立,导致验证绕过。//说明
    此漏洞存在于PHP 5.x版本,PHP 7+会直接报Warning但仍返回NULL。防御方法:1. 使用===严格比较2. 先检查参数类型is_string()
    
    //示例
    if (strcmp($_POST['password'], $real_password) == 0) {echo "Login success!";
    }//payloadPOST: password[]=1//修复代码if (is_string($_POST['password']) && strcmp($_POST['password'], $real_password) === 0) {echo "Login success!";}
    
  • intval():将变量转换为整数类型。在转换时会忽略非数字字符。如intval("123abc")123intval("abc")0

  • strval():把变量转换为字符串类型。如strval(123)会返回 字符串"123"。

  • floatval():获取变量的浮点数值。转换时可能存在精度丢失问题。例如floatval("3.14abc")会返回 3.14。

  • ==:松散比较。比较两个值是否相等,不比较类型。存在类型比较漏洞,可能导致不同类型的值被判定为相等。例如0 == "abc"的结果为 true。

  • ===:严格比较。比较两个值是否相等且类型相同。

6、其他常见函数:

  • isset():检测变量是否已声明且非nullisset($undefined)false;若检测数组键值,需明确指定,如isset($_GET["key"]),常用于绕过未初始化变量的错误。
  • assert():检查表达式是否为真(PHP < 8.0)。assert("1==1")true;若参数可控,可能直接执行代码(如assert("system('ls')"))。
  • substr():截取字符串的一部分。 $part = substr("HelloCTF", 5); // 返回"CTF"
  • trim():去除字符串首尾空白字符。trim(" abc ")"abc";但无法移除中间空格
  • file_exists():检查文件是否存在。file_exists("/etc/passwd")true;可用于探测敏感文件路径,但本身不读文件内容。
  • filter_var():过滤变量。filter_var("a@b.com", FILTER_VALIDATE_EMAIL)"a@b.com";但某些畸形输入可能绕过校验(如换行符注入)。
  • phpinfo():输出 PHP 的配置信息。
  • preg_replace(): 执行正则表达式搜索和替换。例如:$newStr = preg_replace("/apple/i", "orange", $str); 会将 $str 中的 “apple” 替换为 “orange”。/i匹配时不区分大小写
  • preg_match():执行正则匹配。preg_match("/^[a-z]+$/", "abc")1;若正则表达式可控,可能触发ReDoS或绕过过滤。
  • die():输出一条消息并退出当前脚本。例如die("Database connection failed!")会显示错误信息并终止脚本。
  • exit():输出一条消息并退出当前脚本。与die()类似。如exit("Invalid input!")会显示错误信息并终止脚本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教程:PyCharm 中搭建多级隔离的 Poetry 环境(从 Anaconda 到项目专属.venv)

核心思维&#xff1a;为什么需要 “多级隔离”&#xff1f; 在复杂项目中&#xff0c;环境冲突是最棘手的问题&#xff08;比如系统 Python 版本不同、依赖包版本冲突&#xff09;。通过 “Anaconda 虚拟环境 → 项目 Poetry 环境 → 工具级隔离” 的三层架构&#xff0c;实现…

Rollup vs Webpack 深度对比:前端构建工具终极指南

前端工程领域始终面临一个根本选择&#xff1a;如何在模块化编码规范与工程化构建效率之间取得最佳平衡。Rollup与Webpack分别代表着两种不同维度的解决方案&#xff0c;本文将揭示它们的真实应用场景与核心差异。 一、核心差异全景图&#xff08;附最新对比&#xff09; 核心能…

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…

Easy Excel

Easy Excel 一、依赖引入二、基本使用1. 定义实体类&#xff08;导入/导出共用&#xff09;2. 写 Excel3. 读 Excel 三、常用注解说明&#xff08;完整列表&#xff09;四、进阶&#xff1a;自定义转换器&#xff08;Converter&#xff09; 其它自定义转换器没生效 Easy Excel在…

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…

AI高考志愿助手应用架构设计并上线实施运行

环境: AI高考志愿助手 问题描述: AI高考志愿助手应用架构设计并上线实施运行 业务需求:开发一个AI升学助手,功能是帮助用户模拟填报高考志愿等功能,数据是历年各专业的录取分数线表格。数据确认: 近3年约100多万条数据,原始数据是excel表格数据。解决方案: 一、项…

深入浅出掌握 Axios(持续更新)

在了解ajax和axios之前&#xff0c;我们先观察一下他们是什么英文的缩写 ajax 的名字为 asynchroanous JavaScript and XML 而axios的名称来源于英文单词“axis”与“I/O”的结合&#xff0c;并非直接缩写自某个特定短语。 先导知识 在本文我们简单的介绍一下ajax后着重讲解…

windows10下搭建nfs服务器

windows10下搭建nfs服务器 有参考这篇博客 Windows10搭建NFS服务 - fuzidage - 博客园 下载 NFS Server这个app 通过网盘分享的文件&#xff1a;nfs1268 (1).exe 链接: https://pan.baidu.com/s/1rE4h710Uh-13kWGXvjkZzw 提取码: mwa4 --来自百度网盘超级会员v5的分享 下载后…

npm符号链接

前言 最近在写一个快应用项目&#xff0c;demo中依赖了本地文件&#xff0c;package.json如下&#xff1a; 此时 node_modules 下出现了 mysdk&#xff0c;复制整个项目&#xff0c;但是copy的项目中的node_modules并未出现该文件&#xff0c;导致报错。 解决方案 观察 pa…

SQL 中 IDENTITY 列的特殊处理.

SQL 处理中,遇到提示: "消息 544,级别 16,状态 1,第 3 行 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 BM 中的标识列插入显式值。" 即当 SQL Server 表中的 ​​标识列(Identity Column)​​ 插入显式值,但未启用 IDENTITY_INSERT 选项。由此报错,以下是详…

网络安全等级保护中关于SSL证书的整改如何处理?

SSL证书在网络安全等级保护&#xff08;等保&#xff09;体系中扮演着至关重要的角色&#xff0c;是实现多个等保核心要求&#xff08;尤其是三级及以上&#xff09;的关键技术手段之一。其重要性主要体现在以下几个方面&#xff1a; 满足“身份鉴别”要求&#xff08;等保要求…

Docker容器化打造elasticsearch8.18.2集群企业实战(含kibana+证书认证)

主机信息 主机配置4Core8GB硬盘大于80GB 主机名IP地址角色10-0-17-12310.0.17.123es-node110-0-17-15810.0.17.158es-node2kibana-15610.0.17.156kibana 一、环境准备 1. 安装 Docker 这里就不介绍如何安装docker了&#xff0c;本文docker版本为20 2. 主机名与网络与内核配置…

JAVA语言的学习(Day_1)

写一个项目并运行&#xff1a; 第一步&#xff1a;新建一个.txt文本。右击点开用Notepad打开&#xff0c;并编辑。 编辑并保存后&#xff0c;可以在文件的查看中&#xff0c;显示出文件的类型&#xff08;eg: .txt / .java)。将txt文本的.txt类型改为.java。 之后在下面的截…

JS 原型与原型链详解

JavaScript 原型与原型链详解 文章目录 JavaScript 原型与原型链详解一、基础概念类1.1 什么是原型&#xff1f;JavaScript 中如何访问一个对象的原型&#xff1f;1.2 构造函数、实例对象和原型对象之间的关系是什么&#xff1f;1.3 prototype 和 **proto** 的区别是什么&#…

DEVICENET转MODBUS TCP网关连接DeviceNet数字远程IO模块配置案例

设备与网络架构&#xff0c;主控设备&#xff1a;支持Modbus TCP协议的PLC&#xff08;如西门子S7-1200&#xff09;。网关设备&#xff1a;开疆智能Modbus TCP转DeviceNet网关KJ-DVCZ-MTCPS&#xff08;需支持DeviceNet从站功能&#xff09;。目标设备&#xff1a;DeviceNet数…

Ubuntu下使用PyTurboJPEG加速图像编解码

目录 一、概述 二、安装PyTurboJPEG 三、测试 一、概述 在计算机视觉领域&#xff0c;图像编解码是绕不开的基础环节。虽然 OpenCV 能解决大部分图像处理问题&#xff0c;但在性能要求严苛的场景下存在短板。本文将介绍基于 libjpeg-turbo 的高效 JPEG 编解码库 PyTurboJPE…

MCU、MPU、GPU、Soc、DSP、FPGA、CPLD……它们到底是什么?

MCU、MPU、GPU、Soc、DSP、FPGA、CPLD…… 这些简称在各大论坛、会议、发布会中屡见不鲜&#xff0c;看到简称&#xff0c;虽然也能说出大概&#xff1b; 但要问具体是什么&#xff1f;用在什么场景&#xff1f;又有什么区别……好像还是差点意思&#xff1b;本篇文章就记录一…

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…

[网页五子棋][用户模块]数据库设计和配置(MyBatis)、约定前后端交互接口、服务器开发

文章目录 数据库数据库设计配置 MyBatis1. Spring 配置2. 创建实体类3. 创建 Mapper 接口4. 使用 MyBatis 约定前后端交互接口登录接口注册接口获取用户信息 服务器开发loginregistergetUserInfo完整代码 数据库 数据库设计 完成注册登录以及用户分数管理 使用数据库来保存上…

Qt/C++学习系列之列表使用记录

Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件&#xff0c;同步使用QTableWidgetItem进行单元格的设置&#xff0c;最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…