如何在同页面运行的两个PHP文档间传递变量?有比AJAX更快的方法吗?
实现方案说明
AJAX不是PHP不同文档间传递变量的唯一方式,针对你描述的「同一页面运行的两个PHP文档」场景,有远比AJAX更简单快捷的实现方案,按不同使用场景分类如下:
场景1:两个PHP文件在同一服务端请求中被引入
如果是在主入口文件中先后加载两个PHP文件,直接用include/require引入即可,不需要额外做任何传值操作。
PHP的引入机制本质是把被引入文件的代码直接插入到当前位置执行,全局作用域的变量可以直接共享:
// 主文件(比如index.php)的代码 require 'doc1.php'; // 执行后全局变量$counter = 7已定义 require 'doc2.php'; // 执行时$x可以直接读取全局变量$counter的值
这种方案是性能最高、实现最简单的,适合绝大多数页面内多PHP模块组合的场景。
场景2:两个PHP文件对应不同的用户请求
如果doc1和doc2是独立被请求的(比如先访问doc1.php生成页面,再异步请求doc2.php拿数据、或者跳转到doc2.php),可以用以下几种服务端/HTTP原生方案:
- 会话(Session)方案(最常用,适合用户级别的全局变量共享)
两个文件顶部都需要先开启会话,变量存在服务端会话中,同用户的所有请求都可以读取:// doc1.php 顶部先加session_start() session_start(); $_SESSION['counter'] = 7;// doc2.php 顶部同样先加session_start() session_start(); $x = $_SESSION['counter']; - URL参数方案(适合单次跳转传值)
访问doc2的时候直接把参数拼在URL上,doc2通过GET参数读取:
访问地址样例:doc2.php?counter=7// doc2.php 代码 $x = $_GET['counter']; - Cookie方案(适合长期保存在客户端的非敏感变量)
变量存在客户端Cookie中,同域名下的所有PHP请求都可以读取:// doc1.php 代码 setcookie('counter', 7, time() + 86400); // 有效期1天// doc2.php 代码 $x = $_COOKIE['counter'];
AJAX的适用场景
AJAX是前端异步请求技术,只有当你需要在页面不刷新的前提下,前端从后端的PHP接口拉取数据的时候才需要使用。纯服务端层面的PHP文件变量传递完全不需要用到AJAX,上述方案的实现成本和性能都远优于AJAX。
内容的提问来源于stack exchange,提问作者abh3698
相关产品推荐
相关产品推荐

