有没有在PHP方式使用持久性数据作为Java EE的? (PHP共享线程之间的对象),而会议也没

2019-07-20 13:23发布

有没有在PHP的方式在Java服务器使用“出会议的”变量,就不会被加载/卸载每Connexion的,什么样的?

请原谅我的缺乏准确性,我不知道如何把它写在一个适当的方式。

主要的想法是有这样的事情:

<?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:

看来唯一的PHP本地方法做这样的事情是共享内存( shmop )和命名管道。 我会用一个管理方式访问共享对象以外,没有心存储器管理(共享存储器块的大小),也没有系统问题(管)。

然后,我浏览网络的PHP模块/库提供的功能/方法来做到这一点:我什么也没找到。

编辑3:

后在路上的几个研究中指出@KFO,似乎在putenv / setenv都没有作出处理对象(我会避免序列化)。 因此,解决这个问题的短“东西”,比如字符串或数字,但没有更多的大/情结的对象。

使用“ENV方式”而另一种方法来处理较大的对象将是未粘附,并添加复杂的代码和可维护性。

编辑4:

发现这一点:的DBus( GREE实验室的DBus ),但我没有工具,在工作中对其进行测试。 已经有人测试过吗?

我打开每一个建议。

谢谢

EDIT 5( “应答”):

由于的DBus不正是我要找的(需要安装第三方的模块,没有“严重”的应用程序的证据),我现在使用它已经证明了它的可靠性(以下@PeterM评论内存缓存,见下文)。

Answer 1:

// 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'];

这个工程出PHP的开箱。 使用相同的会话ID(而不是一个随机的用户潮头字符串)为所有游客初始化会话导致这对所有用户相同的会话。


难道真的有必要使用会议要达到的目标或将不是最好使用常量 ?

还有就是在PHP在不同的线程共享信息没有纯PHP的方式! 除了“外部”文件/数据库/ servervariable / sessionfile解决方案。



Answer 2:

你可以在你的.htaccess声明一个变量。 例SetEnv APPLICATION_ENVIRONMENT production并获得其与功能应用程序getenv('APPLICATION_ENVIRONMENT')



Answer 3:

另一种解决方案是包装您的变量的“持久性数据”类,将每一个PHP脚本运行时自动恢复其数据内容。 你的类需要以下几点:

  • 存储内容变量成文件__destructor
  • 从文件中变量的负载内容__constructor

我更喜欢存储JSON格式的文件,这样的内容可以很容易地检查调试,但这是可选的。

要知道,有些Web服务器将改变当前的工作目录中的析构函数,所以你需要使用绝对路径的工作。



Answer 4:

我想你可以使用$_SESSION['aConstantValueForEveryone']你可以读它在同一个域中的每一页上。

考虑到参考它的手册 。



文章来源: Is there a way in PHP to use persistent data as in Java EE? (sharing objects between PHP threads) without session nor cache/DB