【发布时间】: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: )
标签: php include unset permanent redefine