PHP中是否有一种方法可以像Java EE一样使用持久数据?(在PHP线程之间共享对象)没有session或cache/DB

Ben*_*enj 8 php persistence share shared-memory inter-process-communicat

在PHP中是否有一种方法可以使用"会话外"变量,这些变量不会在每个连接处加载/卸载,就像在Java服务器中一样?

请原谅我缺乏准确性,我不知道如何以正确的方式写它.

主要想法是这样的事情:

<?php
    ...
    // $variablesAlreadyLoaded is kind of "static" and shared between all PHP threads
    // No need to initialize/load/instantiate it.
    $myVar = $variablesAlreadyLoaded['aConstantValueForEveryone'];
    ...
?>
Run Code Online (Sandbox Code Playgroud)

我已经做过这样的使用shmop和其他奇怪的事情,但如果有一个"干净"的方式来做"纯PHP"而不使用缓存系统(我想到APC,Redis ......),也没有数据库.

编辑1:

由于人们(感谢他们花时间陪我)以同样的方式回答我的会话,我添加了一个我错过了写的约束:没有会话请.

编辑2:

似乎唯一的PHP本机方法是共享内存(shmop)和命名管道.我将使用托管方式访问共享对象,不介意内存管理(共享内存块大小)或系统问题(管道).

然后,我在网上浏览了一个PHP模块/库,它提供了执行此操作的函数/方法:我什么也没找到.

编辑3:

后在路上的几个研究中指出@KFO,看来该putenv/ setenv不作出处理对象(我会避免序列化).因此,它解决了诸如字符串或数字之类的短"事物"的问题,但不解决更大的/ comples对象的问题.

使用"env way"和另一种处理更大对象的方法将是不相干的,并增加了代码和维护的复杂性.

编辑4:

发现这个:DBus(GREE Lab DBus),但我没有工具在工作中测试它.有人测试了吗?

我对每一个建议持开放态度.

谢谢

编辑5("答案"):

由于DBus不是我正在寻找的(需要安装第三方模块,没有"严重"的应用证据),我现在正在使用已经证明其可靠性的Memcache(关注@PeterM评论,见下文).

pow*_*tac 5

// First page
session_id('same_session_id_for_all');
session_start();
$_SESSION['aConstantValueForEveryone'] = 'My Content';

// Second page
session_id('same_session_id_for_all');
session_start();
echo $_SESSION['aConstantValueForEveryone'];
Run Code Online (Sandbox Code Playgroud)

这在PHP中是开箱即用的。使用相同的会话ID(而不是随机的user-uniqe字符串)来初始化所有访问者的会话会导致一个会话,该会话对于所有用户都是相同的。


是否真的需要使用session来达到目标​​,还是使用常量更好?

没有纯粹的PHP在PHP中的不同线程之间共享信息的方式!除了“外部”文件/数据库/服务器变量/会话文件解决方案。


由于一些评论者指出,Session数据具有序列化/反序列化功能,这可能会破坏传输中的数据,因此存在一种解决方案:在PHP中,serialize_handler可以根据需要配置序列化和反序列化功能。参见https://www.php.net/manual/session.configuration.php#ini.session.serialize-handler查看魔术类方法__sleep()__wakeup()它们定义了对象在序列化时的行为,这可能也很有趣。或反序列化请求。https://www.php.net/manual/language.oop5.magic.php#object.sleep ...从PHP 5.1开始,还有一个预定义的Serializable接口可用:https : //www.php.net/manual/class .serializable.php


Hab*_*lah 1

我认为您可以使用$_SESSION['aConstantValueForEveryone']它,您可以在同一域的每个页面上阅读它。

考虑参考它的手册