我们可以在 php 中创建一个可以从任何 php 脚本操作的超全局布尔变量吗?
Can we create a Superglobal Boolean variable in php that can be manipulated from any php script?
我有一个 php 脚本,每分钟 运行 都会检查一些东西。我需要的是,如果脚本找到它正在检查的内容,然后将布尔值设置为真,以便在脚本的后续 运行 中它可以知道之前的 运行 已将布尔值设置为真。据我了解 $GLOBALS 只能从脚本访问。目前我正在使用数据库来实现这一点。有没有更好的方法?
如果它是同一会话中的循环,您需要阅读有关 PHP 会话 ($_SESSION) 的信息。假设您的 PHP 会话已经开始,您可以使用会话变量。
这是一个基本示例:
<?php
// start session
session_start();
// Should we check something once only?
if(!isset($_SESSION['checked'])){
// Store timestamp incase we want to do the work
// again every so often...
$_SESSION['checked'] = time();
// Do the work...
// Your work code here...
}
?>
如果它在不同时间是 运行 或 CRON,您可以使用简单的缓存文本文件吗?同样,这只是一个基本示例,还有许多其他检查要做,而且您需要自己管理输出。我用一个非常简单的 if / else 来展示逻辑。虽然有各种各样的方法。
<?php
$checked = "/root/path/to/my/cachefile.txt";
$do_work = false;
$err = false;
if($last_time = file_get_contents($checked)){
// Optional: Check to see how long it was since we
// did it last and if we need to do it
// again, flag $do_work as TRUE
} else {
if(file_put_contents($checked,time())){
$do_work = true;
} else {
$err = true;
}
}
// So at this stage we are either going to
// to the work, the work's already been done
// or we can't do the work because there
// was a problem
if($err){
// report a problem as we are unable to
// log the work being done, even if it was
} else {
if($do_work){
// Do your work
}
}
?>
解决方案 1 - 环境变量
您可能需要的是系统范围内存在的东西。
我首先想到的是环境变量。您可以根据需要读取和写入它们。您可以随时检查它们,但其他应用程序也可以看到它们。
会话的问题是会话与请求密切相关。基本上,会话在请求到达时开始,并且它们应该在请求结束时被销毁(在用户登录或注销的意义上)
但问题是关于 cron 作业,它基本上是一个 cli 程序。没有任何关联的请求。
解决方案 2 - 基于文件
通过基于文件的检查,您可以创建一个文件,并在文件中添加标志。或者文件本身可以是标志。
解决方案 3 - 通过使用数据存储
如果您有类似 Redis 系统 运行 作为应用程序的一部分,您可以使用它来存储 flag/condition .
我有一个 php 脚本,每分钟 运行 都会检查一些东西。我需要的是,如果脚本找到它正在检查的内容,然后将布尔值设置为真,以便在脚本的后续 运行 中它可以知道之前的 运行 已将布尔值设置为真。据我了解 $GLOBALS 只能从脚本访问。目前我正在使用数据库来实现这一点。有没有更好的方法?
如果它是同一会话中的循环,您需要阅读有关 PHP 会话 ($_SESSION) 的信息。假设您的 PHP 会话已经开始,您可以使用会话变量。 这是一个基本示例:
<?php
// start session
session_start();
// Should we check something once only?
if(!isset($_SESSION['checked'])){
// Store timestamp incase we want to do the work
// again every so often...
$_SESSION['checked'] = time();
// Do the work...
// Your work code here...
}
?>
如果它在不同时间是 运行 或 CRON,您可以使用简单的缓存文本文件吗?同样,这只是一个基本示例,还有许多其他检查要做,而且您需要自己管理输出。我用一个非常简单的 if / else 来展示逻辑。虽然有各种各样的方法。
<?php
$checked = "/root/path/to/my/cachefile.txt";
$do_work = false;
$err = false;
if($last_time = file_get_contents($checked)){
// Optional: Check to see how long it was since we
// did it last and if we need to do it
// again, flag $do_work as TRUE
} else {
if(file_put_contents($checked,time())){
$do_work = true;
} else {
$err = true;
}
}
// So at this stage we are either going to
// to the work, the work's already been done
// or we can't do the work because there
// was a problem
if($err){
// report a problem as we are unable to
// log the work being done, even if it was
} else {
if($do_work){
// Do your work
}
}
?>
解决方案 1 - 环境变量
您可能需要的是系统范围内存在的东西。 我首先想到的是环境变量。您可以根据需要读取和写入它们。您可以随时检查它们,但其他应用程序也可以看到它们。
会话的问题是会话与请求密切相关。基本上,会话在请求到达时开始,并且它们应该在请求结束时被销毁(在用户登录或注销的意义上)
但问题是关于 cron 作业,它基本上是一个 cli 程序。没有任何关联的请求。
解决方案 2 - 基于文件
通过基于文件的检查,您可以创建一个文件,并在文件中添加标志。或者文件本身可以是标志。
解决方案 3 - 通过使用数据存储
如果您有类似 Redis 系统 运行 作为应用程序的一部分,您可以使用它来存储 flag/condition .