PHP传递参数(跨文件)的8种常见方法
以下是 PHP 中跨文件传递参数的 8 种常见方法,按场景和安全性分类整理,附详细说明和示例代码:
一、超全局变量(适合请求间数据共享)
1. $_GET / $_POST
- 用途:通过 URL 或表单提交传递参数(客户端 → 服务器)
- 示例:
// file1.php
<a href="file2.php?id=123&name=John">跳转</a> // file2.php
$id = $_GET['id']; // 获取 123
$name = $_GET['name']; // 获取 John
- 注意:需对输入数据做过滤(如
filter_input()),防止 XSS 攻击。
2. $_SESSION
- 用途:在会话期间跨页面保持数据(依赖
session_start()) - 示例:
// file1.php
session_start();
$_SESSION['user'] = 'Alice'; // file2.php
session_start();
echo $_SESSION['user']; // 输出 Alice
- 安全:需配置会话安全(如
session.cookie_httponly)。
3. $_COOKIE
- 用途:客户端存储小型数据,自动随请求发送
- 示例:
// file1.php
setcookie("theme", "dark", time() + 86400); // file2.php
echo $_COOKIE['theme']; // 输出 dark
- 限制:数据大小受限(约 4KB),需防范篡改。
二、文件包含(适合同请求内共享数据)
4. include / require + 变量
- 用途:直接共享当前作用域变量(需注意变量污染)
- 示例:
// config.php
$db_host = 'localhost'; // file1.php
include 'config.php';
echo $db_host; // 输出 localhost
- 缺点:变量作用域不可控,可能导致命名冲突。
三、文件存储(适合持久化数据)
5. 文件读写
- 用途:通过文件存储中间数据
- 示例:
// file1.php
file_put_contents('data.txt', 'Hello World'); // file2.php
$data = file_get_contents('data.txt'); // 读取 Hello World
- 注意:需处理文件锁(
LOCK_EX)和并发冲突。
6. 数据库
- 用途:通过数据库(如 MySQL)共享数据
- 示例:
// file1.php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$pdo->exec("INSERT INTO messages (content) VALUES ('Hello')"); // file2.php
$stmt = $pdo->query("SELECT content FROM messages");
$data = $stmt->fetchAll();
- 安全:必须使用预处理语句防止 SQL 注入。
四、序列化与反序列化
7. serialize() 和 unserialize()
- 用途:存储复杂数据结构(如数组、对象)
- 示例:
// file1.php
$data = ['name' => 'Bob', 'age' => 30];
file_put_contents('data.dat', serialize($data)); // file2.php
$data = unserialize(file_get_contents('data.dat'));
echo $data['name']; // 输出 Bob
- 风险:反序列化可能执行恶意代码,需校验数据来源。
五、面向对象方法
8. 静态类属性 / 单例模式
- 用途:通过类共享全局状态
- 示例:
// Config.php
class Config {
public static $value = 'default';
} // file1.php
Config::$value = 'new value'; // file2.php
echo Config::$value; // 输出 new value
方法对比与选择建议
| 方法 | 适用场景 | 安全性 | 持久性 | 数据量限制 |
|---|---|---|---|---|
$_GET/$_POST |
表单/URL 传参 | 低 | 无 | 小 |
$_SESSION |
用户会话数据 | 高 | 会话级 | 中等 |
$_COOKIE |
客户端存储配置 | 中 | 长期 | 小 |
| 文件包含 | 同请求共享配置 | 中 | 无 | 大 |
| 文件存储 | 持久化非敏感数据 | 低 | 长期 | 大 |
| 数据库 | 结构化数据共享 | 高 | 长期 | 大 |
| 序列化 | 复杂数据结构 | 低 | 长期 | 大 |
| 静态类属性 | 全局配置/状态管理 | 中 | 请求级 | 大 |
总结
- 临时数据传递:优先用
$_SESSION或include(注意作用域) - 客户端数据:用
$_GET/$_POST/$_COOKIE(必须过滤输入) - 持久化存储:选择文件或数据库
- 全局状态管理:使用静态类属性或单例模式
PHP传递参数(跨文件)的8种常见方法的更多相关文章
- jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...
- 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j
解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...
- Linux下用rm误删除文件的三种恢复方法
Linux下用rm误删除文件的三种恢复方法 对于rm,很多人都有惨痛的教训.我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍.但是很多人可能就不像我这么幸运了.本文 ...
- js获取url的参数和值的N种有效方法
js获取url的参数和值的N种有效方法 function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[" ...
- Python爬虫突破封禁的6种常见方法
转 Python爬虫突破封禁的6种常见方法 2016年08月17日 22:36:59 阅读数:37936 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于用 ...
- JS数组去重的几种常见方法
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- JS去重的几种常见方法
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- MyBatis DAO层传递参数到mapping.xml 几种方式
Dao层传递参数到mapping.xml文件的几种方式:(Mybatis传值总结) 第一种:传递单个参数 Dao层Code片段: /** * 根据articleId查询XXXX详情. * * @par ...
- [转] C++的引用传递、指针传递参数在java中的相应处理方法
原文出处:[http://blog.csdn.net/conowen/article/details/7420533] 首先要明白一点,java是没有指针这个概念的. 但是要实现C++的引用传递.指针 ...
- ASP.NET上传文件的三种基本方法
ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关 ...
随机推荐
- 分布式多级缓存(本地缓存,redis缓存)
结构包: 使用案例: 实现效果: 1.基本并发的本地缓存,基于分布式轻量级锁的redis缓存 2.热缓存(高频访问持续缓存)+快速过期(本地缓存2秒,redis缓存10秒) 3.方法级别缓存清理 (@ ...
- uni-app中picker-view显示默认值的注意点(坑)
今天我在使用picker-view的时候,发现无法给picker-view给一个默认值:后面经过发现后: 才知道到,是一个异步问题: 1==>动态循环出来的数据,在data中直接循环,不要在re ...
- 使用twinkle-tray快捷调整多个显示器的亮度
前言 自从安装了这个小工具,我再也没用过笔记本键盘上的快捷键了~ 介绍 Twinkle Tray enables brightness control on external displays in ...
- 效率起飞!天翼云并行文件服务HPFS高效应对AI时代大模型训练存储挑战!
国内外AI大模型层出不穷,训练数据复杂程度更是呈指数级增加.如今,在万亿级参数时代,单个资源池已无法满足大模型训练场景中动辄PB级的数据存储量,对于企业来说,启用多个资源池构成的分布式存储势在必行. ...
- Vegeta HTTP 负载测试工具
Go接口压测的第三方包,一个很好用的负载测试工具.vegeta测试工具组件(可执行文件)支持linux以及mac系统,这里指的是通过终端命令行进行进行测试,不需要从代码层面使用这个工具的时候支持lin ...
- Linux iostat 命令详解
Linux iostat 命令详解 在Linux系统管理中,监控磁盘I/O性能是一项至关重要的任务.iostat是sysstat包中的一个实用工具,用于监控和显示系统输入输出设备和CPU的使用情况.它 ...
- kickstart和PXE安装
Kickstart安装Kickstart是一种无人值守的安装方式如果在安装过程中出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数:如果没有 ...
- WPF .Net Core 3.1遇到Satellite Assemblies无法正常加载的处理
1.原因 加载的时候没有调取 AssemblyLoadContext.Default 2.解决方案: 在程序启动的时候,手动调用 /// <summary> /// Interaction ...
- autMan奥特曼机器人--可爱猫对接微信教程
教程开始 文章底部下载可爱猫框架以及对应的微信版本 1.安装3.4.0.38版本微信,解压可爱猫框架压缩包 如果微信安装了高于3.4.0.38的版本,请先卸载 2.打开可爱猫框架,会弹微信扫码登录,机 ...
- Ansible - [04] 关于sudo的一些配置
sudo sudo,以超级管理员或其他人的身份执行命令 基本流程 管理员需要先授权(修改/etc/sudoers文件) 普通用户以sudo的形式执行命令 可以通过sudo -l查看授权情况 配置sud ...