我相信一旦脚本或会话结束,全局和超级全局就会死亡。在PHP中存储会话间变量的最佳方法是什么?换句话说,我希望每个会话都可以访问变量。 (它将是一个布尔值,用于同步对服务器上资源的访问。)除了将值存储在文件中之外,还有其他解决方案吗?将变量保存在内存中会很好...
修改
我只是希望能够做到这一点:
while ($beingused)
sleep(5);
$beingused = true;
// Do something
SOLUTION:
非常感谢你的帮助。这是我的解决方案,基于您的输入。
memcache_pconnect('localhost');
while (memcache_get('inuse') == 'true')
usleep(10);
memcache_set('inuse', 'true');
// Do something
memcache_set('inuse', 'false');
更新
毕竟我确实最终选择了文件解决方案。每次用户与应用程序交互时,都会向其提供一个脚本,该脚本会根据用户输入而变化。我意识到脚本文件的存在可以加倍作为布尔值,正如许多响应中所建议的那样。
答案 0 :(得分:2)
根据你的问题,我认为你想要的是使用" 内存数据库"例如SQlite in-memory database,或使用MySQL Memory Storage engine等创建的数据库
但我不确定是否值得使用内存数据库来保存一个变量。
查看更多详情:http://en.wikipedia.org/wiki/In-memory_database
修改强>
在OP编辑之后,他似乎需要在执行特定任务之前获取锁定。 然后我想你也可以使用这些php 信号量相关函数。
http://www.php.net/manual/en/function.sem-get.php
答案 1 :(得分:2)
我使用具有特定名称的空文件(如Linux中的PID文件)。在执行命令之前,脚本会检查文件是否存在,如果不存在,则会创建文件。执行shell脚本后,删除该文件。但要小心文件系统缓存。
另一个快速选项是将标志存储在内存数据库中,如memcache或Redis。
答案 2 :(得分:0)
要跨浏览器保存:使用Cookie。要访问它们,请使用$_COOKIE[]
和set_cookie()
。
要在服务器上保存:使用数据库字段。
<强>更新强>
尽管存在downvotes,并且在更新之后,似乎您可以在数据库中设置一个布尔值并相应地检查其值。当然,页面在数据库中有一个条目 - 节点,日志或其他东西。
答案 3 :(得分:0)
PHP原则之一是 SHARE NOTHING 。这意味着您无法在两个PHP执行/进程/请求处理之间共享任何内容。每个共享的东西都必须在PHP之外共享。
对于同一用户而言,您有会话。对于常规共享,在经典LAMP安装中,您拥有数据库。但您也可以使用文件系统(信号量,锁)。使用数据库放置应用程序锁是一种经典的事情,但它可能会使写入操作非常慢的经典Relationnal数据库变得很糟糕。像Redis这样的一些NOSQL存储引擎具有非常快速的锁定操作支持。