首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想在php中定义一个超全局范围的变量。

我想在php中定义一个超全局范围的变量。
EN

Stack Overflow用户
提问于 2011-08-18 18:20:02
回答 4查看 444关注 0票数 0

我想在php中定义一个全局范围的变量。该变量应该是每个用户都可以访问的,因此它不应该依赖于会话。

我想做一些类似如下的事情:我有一个php脚本,这个脚本通常需要5到15分钟来执行,但在某些特殊情况下可能需要一个多小时。此脚本使用cron作业运行,运行时间间隔为15分钟。此脚本也可以由任何用户手动运行。

现在可以同时运行任意数量的脚本。我想限制这个脚本的数量。

因此,我想要一个变量来存储当前正在执行的脚本的数量。我不想使用DB或文件来存储单个值。

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-18 18:49:48

将变量写入特定的内存地址,并使用诸如计数之类的信息对该地址进行读写,可能会起作用。

有关IPC (进程间通信)的一篇(旧)文章可能会对您有所帮助

http://zez.org/article/articleview/46/

出于兴趣,为什么您不想使用文件或数据库?

另一种解决方案(尽管在技术上很可能使用文件或数据库)是强制脚本使用特定的会话ID。

代码语言:javascript
运行
复制
<?php

$maximum = 1;

session_id(md5('myscript'));
session_start();

if( !isset( $_SESSION['count'] ) ) {
    $_SESSION['count'] = 1;
} else {
    if( $_SESSION['count'] >= $maximum ) {
        die( "too many processes running" );
    } else {
        $_SESSION['count']++;
    }
}

session_write_close();

// simulate running something
sleep(10);

session_id(md5('myscript'));
session_start();

$_SESSION['count']--;

session_write_close();

echo "<br />executed";

?>

注在上面的示例中,对session_write_close()的调用很重要,因为脚本的执行将阻止计数器递增,直到它以其他方式完成。然后,当它关闭它时,它需要重新打开以减少计数器。

显然,由于会话重新打开,脚本中的任何输出都需要进行缓冲(请参见http://www.php.net/ob_start),以防止标头已经发送错误

票数 1
EN

Stack Overflow用户

发布于 2011-08-18 18:22:27

  1. 检查用户访问脚本时是否达到限制
  2. ,当用户存在(或脚本结束)时将其添加到DB
  3. ,将其从DB

中删除

如果没有文件或数据库,则无法将此文件保存到其他地方

票数 1
EN

Stack Overflow用户

发布于 2011-08-18 18:33:20

你的前提条件是相当严格的。内存不在脚本之间共享(或not normally),我们不能使用文件或数据库:这实际上没有可用于共享信息的公共空间,所以每次都必须计算信息。您最好的选择可能是检查正在运行的进程,确定哪些进程属于您的脚本,并对它们进行计数。您提到的cron建议使用Unix,这使事情变得更容易。PHP可能允许在这种程度上控制进程的执行,作为最后一个资源,您始终可以从POSIX运行ps命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7105866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档