PHP可以检测服务器何时关闭?

时间:2011-05-12 16:13:54

标签: php shutdown

有这种情况:

  • Wampserver正在运行
  • 正在运行PHP脚本(set_time_limit(0),循环无止境)
  • 服务器也由用户使用(例如游戏PC)。

假设用户想要关闭计算机,有没有办法在PHP中检测到这一点?所以用户转到开始>关机。

如果没有,是否有一种简单的方法可以确保脚本没有问题? (就像同一个对象的两个查询之间的关闭一样?)

3 个答案:

答案 0 :(得分:3)

register_shutdown_function()似乎是您正在寻找的那个。但是,如果操作系统杀死脚本,则在完全执行关闭代码之前,您无法在脚本中执行任何操作。

  

如果没有,是否有一种简单的方法可以确保脚本没有问题? (就像同一个对象的两个查询之间的关闭一样?)

交易,但他们只确保数据没有损坏,而不是真正写入数据。

我的建议:使用专用系统。

答案 1 :(得分:0)

Windows在用户关闭计算机时向应用程序发送事件。但是,用户仍然可以强制关闭并忽略任何请求阻止关闭的应用程序:

用户强行关闭的能力

  

在Windows XP中,用于阻止的UI   应用程序允许用户   取消关机或终止   阻止申请。如果随后   应用程序也阻止关闭,   系统为每个显示相同的UI   阻止申请。这是   令许多用户感到沮丧,谁,什么时候   关闭,“只是想要”他们的   电脑要关掉。

     

Windows Vista将解决此问题   允许用户终止   阻止应用程序并关闭   “有力。”在强行关机中,   Windows将发送应用程序   WM_QUERYENDSESSION用   ENDSESSION_CRITICAL标志。如果   应用程序响应FALSE,Windows   将继续关闭而不是   取消它,并将发送   应用程序WM_ENDSESSION。如果   应用程序超时响应   WM_QUERYENDSESSION或WM_ENDSESSION,   Windows将终止它。

来源:http://msdn.microsoft.com/en-us/library/ms700677(v=vs.85).aspx

考虑到这一点,即使您收听了这些事件,也不能依赖于能够阻止关机。如果他们在尝试进行数据插入时关闭,您将无法执行任何操作。

答案 2 :(得分:0)

  

假设用户想要关闭计算机,有没有办法在PHP中检测到这一点?所以用户转到开始>关机。

Windows API允许进程注册在执行某些操作时发送给它们的事件。这些消息是针对您正在寻找的案例发送的。

但是应用程序必须能够接收这些消息并及时对它们做出反应。因此,如果您的脚本一直处于忙碌状态,则无法从技术上做出反应。

您可以使用像WinBinder这样的专业库来接近WINAPI,尤其是lowlevel functions PHP W32api可能是另一个可以查看的地方。

您可以在许多网站和Microsoft主页上找到Windows消息(MSDN)。