Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以在php中创建一个可以从任何php脚本操作的超全局布尔变量吗?_Php_Superglobals - Fatal编程技术网

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

我们可以在php中创建一个可以从任何php脚本操作的超全局布尔变量吗?,php,superglobals,Php,Superglobals,我有一个每分钟运行一次的php脚本来检查一些东西。我需要的是,如果脚本找到它要检查的内容,那么将布尔值设置为true,以便在脚本的后续运行中,它可以知道之前的运行已将布尔值设置为true。据我所知,$GLOBALS只能从脚本中访问。目前我正在使用数据库来实现这一点。有更好的方法吗?如果PHP会话($\u会话)是同一会话中的循环,那么您需要阅读它。假设PHP会话已启动,则可以使用会话变量。 以下是一个基本示例: <?php // start session session_start();

我有一个每分钟运行一次的php脚本来检查一些东西。我需要的是,如果脚本找到它要检查的内容,那么将布尔值设置为true,以便在脚本的后续运行中,它可以知道之前的运行已将布尔值设置为true。据我所知,$GLOBALS只能从脚本中访问。目前我正在使用数据库来实现这一点。有更好的方法吗?

如果PHP会话($\u会话)是同一会话中的循环,那么您需要阅读它。假设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-使用数据存储


如果您有一个类似于的系统作为应用程序的一部分运行,您可以使用它来存储标志/条件

可能就是你在找的。它被归类为超级全局脚本如何运行?知道之前发生的事情的原因是什么?也就是说,如果它被设置为“如果它不存在,会发生什么”——这需要长期持续还是短期持续?等等,你能举个例子吗。php页面从不通过浏览器访问。它只是在后台运行。如果脚本每分钟都在运行,那么它可能是作为来自Cron的CLI运行的?这意味着您将无法使用会话。。?数据库可能是您最好的选择,但如果文本文件不可能出现锁定或多个用户问题,您可以使用它。是的,它是从cron运行的。它在后台每分钟运行一次。不涉及浏览器。在这种情况下我可以使用会话吗?虽然我在评论中建议使用PHP会话,但我认为在CLI上运行时它们不起作用。另一个解决方案可能是建议。添加了基于文件的检查,所以基本上我需要将布尔值放入文本文件或数据库,可能文本文件和使用数据库不会有太多性能问题。我想我会坚持我的数据库解决方案。