童年无限好 發表於 2026-5-3 17:22:30

PHP跨文件传递参数的8种常见方法

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、超全局变量(适合请求间数据共享)</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1.&nbsp;$_GET&nbsp;/&nbsp;$_POST</a></li><li><a href="#_lab2_0_1">2.&nbsp;$_SESSION</a></li><li><a href="#_lab2_0_2">3.&nbsp;$_COOKIE</a></li></ul><li><a href="#_label1">二、文件包含(适合同请求内共享数据)</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_3">4.&nbsp;include&nbsp;/&nbsp;require&nbsp;+ 变量</a></li></ul><li><a href="#_label2">三、文件存储(适合持久化数据)</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_4">5.&nbsp;文件读写</a></li><li><a href="#_lab2_2_5">6.&nbsp;数据库</a></li></ul><li><a href="#_label3">四、序列化与反序列化</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_6">7.&nbsp;serialize()&nbsp;和&nbsp;unserialize()</a></li></ul><li><a href="#_label4">五、面向对象方法</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_7">8.&nbsp;静态类属性 / 单例模式</a></li></ul><li><a href="#_label5">方法对比与选择建议</a></li><ul class="second_class_ul"></ul><li><a href="#_label6">总结</a></li><ul class="second_class_ul"></ul></ul></div><p>以下是 PHP 中跨文件传递参数的&nbsp;<strong>8 种常见方法</strong>,按场景和安全性分类整理,附详细说明和示例代码:</p>
<p class="maodian"><a name="_label0"></a></p><h2>一、超全局变量(适合请求间数据共享)</h2>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1.&nbsp;$_GET&nbsp;/&nbsp;$_POST</h3>
<ul><li><strong>用途</strong>:通过 URL 或表单提交传递参数(客户端 &rarr; 服务器)</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// file1.php
&lt;a href="file2.php?id=123&amp;name=John"&gt;跳转&lt;/a&gt;
// file2.php
$id = $_GET['id'];   // 获取 123
$name = $_GET['name']; // 获取 John</pre></div>
<ul><li><strong>注意</strong>:需对输入数据做过滤(如&nbsp;<code>filter_input()</code>),防止 XSS 攻击。</li></ul>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>2.&nbsp;$_SESSION</h3>
<ul><li><strong>用途</strong>:在会话期间跨页面保持数据(依赖&nbsp;<code>session_start()</code>)</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// file1.php
session_start();
$_SESSION['user'] = 'Alice';
// file2.php
session_start();
echo $_SESSION['user']; // 输出 Alice</pre></div>
<ul><li><strong>安全</strong>:需配置会话安全(如&nbsp;<code>session.cookie_httponly</code>)。</li></ul>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>3.&nbsp;$_COOKIE</h3>
<ul><li><strong>用途</strong>:客户端存储小型数据,自动随请求发送</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// file1.php
setcookie("theme", "dark", time() + 86400);
// file2.php
echo $_COOKIE['theme']; // 输出 dark</pre></div>
<ul><li><strong>限制</strong>:数据大小受限(约 4KB),需防范篡改。</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>二、文件包含(适合同请求内共享数据)</h2>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>4.&nbsp;include&nbsp;/&nbsp;require&nbsp;+ 变量</h3>
<ul><li><strong>用途</strong>:直接共享当前作用域变量(需注意变量污染)</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// config.php
$db_host = 'localhost';
// file1.php
include 'config.php';
echo $db_host; // 输出 localhost</pre></div>
<ul><li><strong>缺点</strong>:变量作用域不可控,可能导致命名冲突。</li></ul>
<p class="maodian"><a name="_label2"></a></p><h2>三、文件存储(适合持久化数据)</h2>
<p class="maodian"><a name="_lab2_2_4"></a></p><h3>5.&nbsp;文件读写</h3>
<ul><li><strong>用途</strong>:通过文件存储中间数据</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// file1.php
file_put_contents('data.txt', 'Hello World');
// file2.php
$data = file_get_contents('data.txt'); // 读取 Hello World</pre></div>
<ul><li><strong>注意</strong>:需处理文件锁(<code>LOCK_EX</code>)和并发冲突。</li></ul>
<p class="maodian"><a name="_lab2_2_5"></a></p><h3>6.&nbsp;数据库</h3>
<ul><li><strong>用途</strong>:通过数据库(如 MySQL)共享数据</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// file1.php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$pdo-&gt;exec("INSERT INTO messages (content) VALUES ('Hello')");
// file2.php
$stmt = $pdo-&gt;query("SELECT content FROM messages");
$data = $stmt-&gt;fetchAll();</pre></div>
<ul><li><strong>安全</strong>:必须使用预处理语句防止 SQL 注入。</li></ul>
<p class="maodian"><a name="_label3"></a></p><h2>四、序列化与反序列化</h2>
<p class="maodian"><a name="_lab2_3_6"></a></p><h3>7.&nbsp;serialize()&nbsp;和&nbsp;unserialize()</h3>
<ul><li><strong>用途</strong>:存储复杂数据结构(如数组、对象)</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// file1.php
$data = ['name' =&gt; 'Bob', 'age' =&gt; 30];
file_put_contents('data.dat', serialize($data));
// file2.php
$data = unserialize(file_get_contents('data.dat'));
echo $data['name']; // 输出 Bob</pre></div>
<ul><li><strong>风险</strong>:反序列化可能执行恶意代码,需校验数据来源。</li></ul>
<p class="maodian"><a name="_label4"></a></p><h2>五、面向对象方法</h2>
<p class="maodian"><a name="_lab2_4_7"></a></p><h3>8.&nbsp;静态类属性 / 单例模式</h3>
<ul><li><strong>用途</strong>:通过类共享全局状态</li><li><strong>示例</strong>:</li></ul>
<div class="jb51code"><pre class="brush:php;">// Config.php
class Config {
    public static $value = 'default';
}
// file1.php
Config::$value = 'new value';
// file2.php
echo Config::$value; // 输出 new value</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>方法对比与选择建议</h2>
<table><tbody><tr><th>方法</th><th>适用场景</th><th>安全性</th><th>持久性</th><th>数据量限制</th></tr><tr><td><code>$_GET</code>/<code>$_POST</code></td><td>表单/URL 传参</td><td>低</td><td>无</td><td>小</td></tr><tr><td><code>$_SESSION</code></td><td>用户会话数据</td><td>高</td><td>会话级</td><td>中等</td></tr><tr><td><code>$_COOKIE</code></td><td>客户端存储配置</td><td>中</td><td>长期</td><td>小</td></tr><tr><td>文件包含</td><td>同请求共享配置</td><td>中</td><td>无</td><td>大</td></tr><tr><td>文件存储</td><td>持久化非敏感数据</td><td>低</td><td>长期</td><td>大</td></tr><tr><td>数据库</td><td>结构化数据共享</td><td>高</td><td>长期</td><td>大</td></tr><tr><td>序列化</td><td>复杂数据结构</td><td>低</td><td>长期</td><td>大</td></tr><tr><td>静态类属性</td><td>全局配置/状态管理</td><td>中</td><td>请求级</td><td>大</td></tr></tbody></table>
<p class="maodian"><a name="_label6"></a></p><h2>总结</h2>
<ul><li><strong>临时数据传递</strong>:优先用&nbsp;<code>$_SESSION</code>&nbsp;或&nbsp;<code>include</code>(注意作用域)</li><li><strong>客户端数据</strong>:用&nbsp;<code>$_GET</code>/<code>$_POST</code>/<code>$_COOKIE</code>(必须过滤输入)</li><li><strong>持久化存储</strong>:选择文件或数据库</li><li><strong>全局状态管理</strong>:使用静态类属性或单例模式</li></ul>
頁: [1]
查看完整版本: PHP跨文件传递参数的8种常见方法