2011-05-12 56 views
0

有这样的情况:PHP可以检测服务器何时关闭?

  • Wampserver运行
  • 甲PHP脚本运行(参数或者set_time_limit(0),无端while循环)
  • 服务器还用于由用户(如,例如游戏PC)。

说用户想关闭计算机,有什么办法可以在PHP中检测到这种情况吗?所以用户转到开始>关机。

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

回答

3

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

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

事务,但它们只确保数据没有损坏,不是数据真的写入。

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

+0

您可以将MySQL配置为在提交时刷新到磁盘,因此,如果RAID控制器(如果有)不会欺骗邮件,则可以确保数据实际写入的事务。所以交易不能确保这一点并不完全正确。 – 2011-05-12 16:21:13

+0

刚刚测试过,如果register_shutdown_function()在用户关闭服务器时工作,但不起作用。但谢谢你的建议:) – Simon 2011-05-12 16:51:09

+0

@Micheal:正如你所说的“提交”。我提到的问题是关于发生了什么事,如果脚本在两者之间被杀害。 – KingCrunch 2011-05-12 17:03:56

0

Windows在用户关闭计算机时向应用程序发送事件。但是用户仍然具有强制关闭和忽略任何应用程序,要求阻止关机的功能:

用户能够强制关闭

在Windows XP中,为阻止 应用程序的UI可以让用户或者 取消关机或终止 阻止应用程序。如果后续的 应用程序也阻止关机,则系统会为每个 阻止应用程序显示相同的用户界面。这对于许多用户来说令人沮丧,他们在 关机时“只想”他们的 电脑关闭。

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

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

考虑到这一点,你不能依靠的是能够阻止即使你听了这些事件关闭。如果在尝试执行数据插入时关闭它,您也无法执行任何操作。

0

说用户想关闭计算机,有没有什么办法可以在PHP中检测到这个?所以用户转到开始>关机。

Windows API允许进程注册发送给它们的事件,以防执行某些操作。这些消息将发送您要查找的内容。

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

您可以使用一个专门的图书馆像WinBinder亲近的WINAPI,尤其是lowlevel functions的PHP W32api可能是另一个地方看。

你找到记录在很多网站和Microsoft主页Windows消息(MSDN)。