【发布时间】:2013-02-11 17:46:28
【问题描述】:
在 PHP 中有没有办法使用“会话外”变量,这些变量不会像在 Java 服务器中那样在每次连接时都被加载/卸载?
请原谅我不够准确,我不知道如何正确地写它。
主要的想法是有这样的东西:
<?php
...
// $variablesAlreadyLoaded is kind of "static" and shared between all PHP threads
// No need to initialize/load/instantiate it.
$myVar = $variablesAlreadyLoaded['aConstantValueForEveryone'];
...
?>
我已经使用shmop 和其他奇怪的东西做了这样的事情,但是如果在“纯 PHP”中有一种“干净”的方法可以在不使用缓存系统的情况下做到这一点(我认为 APC、Redis ......) ,也不是数据库。
编辑 1:
由于人们(感谢他们为我花时间)以同样的方式回答我的会话,我添加了一个我错过写的约束:请不要会话。
编辑 2:
似乎只有共享内存 (shmop) 和命名管道才能做到这一点。我会使用托管方式来访问共享对象,而不考虑内存管理(共享内存块大小)或系统问题(管道)。
然后,我在网上浏览了一个 PHP 模块/库,它提供了执行此操作的函数/方法:我什么也没找到。
编辑 3:
在对@KFO 指出的方式进行了一些研究之后,似乎putenv / setenv 不是用来处理对象的(我会避免序列化)。因此,它解决了诸如字符串或数字之类的短“事物”的问题,但不适用于更大/更复杂的对象。
使用“env 方式”和另一种方法来处理更大的对象会不连贯,并增加代码的复杂性和可维护性。
编辑 4:
发现这个:DBus (GREE Lab DBus),但我没有工具可以在工作中对其进行测试。有人测试过吗?
我愿意接受每一个建议。
谢谢
编辑 5(“答案”):
由于 DBus 并不是我想要的(需要安装第三方模块,没有“严重”的应用程序证据),我现在使用的 Memcache 已经证明了它的可靠性(在 @PeterM 评论之后,见下文)。
【问题讨论】:
-
老实说,我以 memcache 结束了一些类似的问题
-
@PeterM :好的,写在屏幕上的便利贴上,但它不符合初始要求。
-
@ArjanTijms :感谢您修复了标题中的错误 :)
-
@Benj,你可以。 APC 和 Shmop stackoverflow.com/a/5605710/632951
-
@Pacerier,使用 Memcache 找到了解决方案
标签: php persistence share shared-memory inter-process-communicat