我们可以在 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 .