【发布时间】:2022-10-24 17:26:12
【问题描述】:
服务器上有一个 PHP 脚本,它运行大约 20 - 30 秒,具体取决于它正在处理的文件的大小。
为了在新实例启动时停止正在运行的实例,我更改了会话变量。在脚本的工作循环中,我正在检查此会话变量是否已更改以停止执行。 这行不通。为什么是这样 ?
基本上我首先开始会议:
session_start();
然后我生成一个随机数,将其分配给一个实例变量,杀死所属的会话变量并将生成的数字分配给该会话变量:
$this->number = rand();
unset( $_SESSION[ 'number' ] );
$_SESSION[ 'number' ] = $this->number;
在循环中,我让$_SESSION[ 'number' ] 被检查是否有更改,该更改应在启动新脚本实例时出现:
for( $i = 0 to 1.000.000 ){
$s = $_SESSION[ 'number' ];
if( $this->number !== $s ){
die();
}
所以让我们说:
script1 启动会话,将 1 存储在 $_SESSION[ 'number' ] 中并检查对 $_SESSION[ 'number' ] 的更改以在循环时终止。
script2 启动并将 2 存储在 $_SESSION[ 'number' ]
那时 script1 应该意识到这个变化并停止工作
什么不是。
请善待并告诉我为什么这不起作用,因为我让脚本在启动时回显实际的$_SESSION[ 'number' ],并看到从之前启动的脚本生成的数字被上次启动的实例更改。
【问题讨论】:
-
它与通过 Ajax 请求启动的脚本相同。
-
只有一个脚本可以同时访问一个会话。你需要一个不同的媒介...
-
我现在让脚本在循环中回显实际的 $_SESSION[ 'number' ]。脚本的每个实例都显示其自行生成的 $_SESSION[ 'number' ] 直到结束。如果我尝试这样做,我会让 3-5 个实例同时运行,并且每个实例都显示不同的 $_SESSION['number']。这符合您的期望吗?
-
我可能会提到,当我让 $_SESSION[ 'number' ] 作为一阶回显(在脚本的构造内)时,会显示从之前启动的脚本生成的 $_SESSION[ 'number' ]。之后,当脚本生成自己的 $_SESSION[ 'number' ] 时,它会保持不变,直到结束。
-
@honk der hase 我很确定,当我在论坛或工作网站甚至 ebay 或 stackoverflow 上时,我可以通过用鼠标滚轮单击几乎同时打开多个站点,它们都从 $ 获取信息_SESSION 即如果我登录等等。