如何在PHP应用的所有文件中访问共用数组?
解决PHP跨文件共用数组为空的问题
问题根源
PHP的每个HTTP请求都是独立进程,index.php中填充的$myarray仅存在于当前请求的内存中,请求结束后就会销毁。image.php是新的独立请求,重新引入myvars.php只会得到一个新的空数组,二者的变量完全不共享。
解决方案:利用Session共享数组数据
通过Session将填充后的数组持久化,让不同请求都能访问到这个数组。
- 修改
index.php:将填充后的数组存入Session
<?php require("./myvars.php"); require("./functions.php"); session_name("myawesomesession"); session_start(); readfiles($myarray); // 将填充完成的数组存入Session $_SESSION['myarray'] = $myarray; ?> <img src="./image.php" />
- 修改
image.php:从Session读取数组
<?php require("./functions.php"); session_name("myawesomesession"); session_start(); // 必须启动Session才能访问$_SESSION变量 // 先判断Session中的数组是否存在且有效 if (!isset($_SESSION['myarray']) || empty($_SESSION['myarray'])) { // 兜底处理:返回默认图片,避免报错 header('Content-Type: image/png'); readfile('default.png'); exit; } $image = getrandomfile($_SESSION['myarray']); header('Content-Type: ' . mime_content_type($image)); readfile($image); ?>
- 修正
functions.php:修正语法并优化逻辑
<?php // 移除多余的require("./myvars.php"),避免重复初始化数组 function readfiles(&$myarray){ // 保留你的文件遍历逻辑 while(/* 此处填写你的循环条件 */){ $file = /* 获取目标文件路径 */; array_push($myarray, $file); } } function getrandomfile($myarray){ if (empty($myarray)) { return 'default.png'; // 空数组时返回默认图片 } $randomIndex = array_rand($myarray); return $myarray[$randomIndex]; } ?>
补充说明
myvars.php可以保留,仅作为index.php初始化空数组的入口;也可以直接在index.php中写$myarray = [];来替代引入该文件。- 若数组内容较大,或者需要长期共享,也可以考虑用文件缓存、数据库等方式存储,Session适合小到中等规模的临时数据共享。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

