如何使 PHP 永久运行脚本“忘记”一切并几乎像重新启动一样执行

Posted

技术标签:

【中文标题】如何使 PHP 永久运行脚本“忘记”一切并几乎像重新启动一样执行【英文标题】:How to make PHP permanently running script "forget" everything and perform almost as a restart 【发布时间】:2022-01-04 19:28:41 【问题描述】:

我有一个在服务器上永久运行的 php 脚本。我重新启动它的权限非常有限。有什么办法可以从内部重置脚本中的所有内容?我并不是要物理地停止和启动脚本。

我正在寻找一种几乎可以重新启动它的方法(unset() 所有变量,取消包含所有包含,“忘记”所有功能),就像重新启动脚本一样。

原因是至少在调试阶段能够“更新”脚本。在本地主机上,一切正常,但在服务器上存在一些问题,对于任何更改,我都必须致电服务台)。假设在包含中进行一些更改 - 然后再次包含它,这意味着初始化新函数,激活新变量....

我知道重新启动会更容易,更好,crone 会完成这项工作,但不幸的是没有选项......(愚蠢的情况,我知道 - 但我无法改变它,所以在我力所能及的范围内寻找解决方案)

想法是

<?
while (true) 
  require(myInclude.php);

  while (true)
    // here is the code I need to process, it is in endless loop as it serves as a websocket server
    doWhatIsNeeded(this_works_fine_no_need_to_adjust);

    // condition that starts all the "cleaning"
    if ($restartIsRequired == true)
      break;
    
  
  //unset all variables, un include all includes, "forget" all functions
  // **************************************************************
  // ****** here this is the part, I would like to help with ******
  // ******                     thank you :)                 ******
  // **************************************************************


【问题讨论】:

您似乎可以使用 cron 作业,但大多数时候有替代方案,我只是不明白,请您提供更多信息和实际代码。 “取消设置函数”到底是什么意思,为什么需要这样做?有点不清楚您要在这里解决的实际问题是什么。由于脚本永久运行,您面临什么具体问题? 谢谢大家,cron 将是完美的,不幸的是,在这种情况下它不是解决方案(愚蠢的情况)......实际代码(包括:)超过 8000 行......所以我有写在这里一些例子......谢谢@Noé和ADyson如果你有时间检查更新的问题,它可能会使情况更清楚。 好的。那么,正如您所描述的,您想在什么条件下“重置”或“更新”它?脚本如何知道是时候这样做了?你有什么样的访问权限......你可以在它定期检查的文件中设置一个值,或者在数据库或其他东西中设置一个值吗?除非你只是让它在一段时间后重置所有变量,否则你必须有某种方式向它发出信号。 当然,该脚本处理数千个 websocket 消息,因此其中之一是启动该消息的那个(或者我可以将其保存到数据库并每隔 1000000 次检查一次)......那不是一个问题:) 我知道如何取消设置所有变量,但不知道如何“取消定义”函数和取消包含...以便在新的循环中重新开始(感谢您的时间和兴趣@ADyson: ) 【参考方案1】:

这取决于你想用你的函数做什么,我需要更多信息来尝试和帮助更多。您似乎可以从使用诸如 cron 作业之类的调度程序中受益。

【讨论】:

以上是关于如何使 PHP 永久运行脚本“忘记”一切并几乎像重新启动一样执行的主要内容,如果未能解决你的问题,请参考以下文章

php 脚本在 Ubuntu 14.04 服务器上运行,phpmyadmin 没有

如何让系统变得像重装一样快

Gulp 4:如何检测复杂构建脚本中的“您是否忘记发出异步完成信号?”错误

如何连续运行 PHP 脚本?

如何在我的服务器上运行 python 脚本?

关闭旧的 php websocket