我们可以在php中创建一个可以从任何php脚本进行操作的Superglobal布尔变量吗?

时间:2018-08-21 13:37:24

标签: php superglobals

我有一个php脚本,每分钟运行一次以检查某些内容。我需要的是,如果脚本找到了要检查的内容,则将Boolean设置为true,以便在后续脚本运行时可以知道较早的运行已将Boolean设置为true。据我了解,只能从脚本中访问$ GLOBALS。目前,我正在使用数据库来实现这一目标。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

解决方案1-环境变量

您可能需要的是系统范围内存在的内容。 我想到的第一件事是环境变量。您可以根据需要读写它们。您可以随时检查它们,但其他应用程序也可以看到它们。

会话的问题是会话与请求密切相关。基本上,会话是在请求到达时开始的,会话应该在请求结束时被破坏(从某种意义上说,就像用户已登录或注销一样)

但是问题是关于cron工作,这基本上是一个cli程序。没有任何关联的请求。

解决方案2-基于文件

通过基于文件的检查,您可以创建文件,并将标志添加到文件内部。或文件本身可以是标志。

解决方案3-使用数据存储

如果在应用程序中运行诸如 Redis 之类的系统,则可以使用它来存储标记/条件。

答案 1 :(得分:1)

如果是同一会话中的循环,则需要阅读有关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
  }
}
?>