【发布时间】:2015-09-30 22:06:15
【问题描述】:
有没有办法使用 Apache 2 和 PHP 将变量存储在服务器 RAM 中,直到服务器关闭?我需要存储一个非常大的数组(hashmap),它应该被初始化一次(而不是用户一次,例如仅在服务器启动时)并从不同的文件访问。
$GLOBALS 没有全局技巧(我无法访问来自不同文件的$GLOBALS 变量,我做错了吗?); $_SESSION 做到了,但这不是我需要的。我需要将它存储在服务器即时访问内存中,只有在服务器重新启动时才会丢失。
显然,答案不是“数据库”,因为查询数据库比从 RAM 访问数组要慢。
在 Java 服务器上可以轻松完成,为什么不能在 Apache 上完成?
【问题讨论】:
-
global!==persistent.... ,甚至 Apache 共享内存 -
只为当前请求存储一个全局变量,而不是在机器上的请求之间存储。我相信 Java servlet 默认具有服务器级存储,但 PHP 没有。然而,很容易在 PHP 中添加一个特性来做到这一点。
-
它不需要持久化:事实上,数据库/文件系统是我从中获取原始数据的地方。想象一个大字典:我读了一次文件并构建了数组。我不能每次都读取文件(或查询数据库),只要服务器存在,我只需要保留数组。即使反序列化一个 1GB 的数组也太慢了,这就是 memcache 所做的(参见stackoverflow.com/questions/1190662/…)。我不需要对象生存到服务器死亡。我正在寻找类似存储在 $_SERVER 数组中的东西,看起来不应该这样做
-
谢谢你。可以在不序列化/反序列化对象的情况下完成吗?像每个用户都有相同 ID 的永久 $_SESSION 之类的东西?我一直将 $_SESSION 视为存储用户信息的地方,而不是全局信息。
-
貌似不行:bytes.com/topic/php/answers/6503-keeping-array-memory 关键字是“应用程序级变量”,php中没有这种东西。看来我要换语言了。
标签: php apache apache2 global-variables