2011-12-13 21 views
1

这更多的是关于最佳实践的问题。我的服务器允许用户使用FontForge将字体从一种格式转换为另一种格式。为了防止冲突,在任何给定的实例中只允许进行一次字体转换。如何在用户取消脚本时处理废弃的PID文件?

当一个用户启动转换时,会创建一个用作锁的PID文件。如果另一个用户在第一次转换仍在运行时尝试启动转换,则该脚本将暂停一会儿并再次检查PID文件。

重复此操作,直到第一个进程删除PID文件,从而解锁对FontForge的访问。但是,如果第一个用户在完成脚本之前取消脚本(通过按浏览器上的停止按钮),则该脚本将在移除PID文件之前退出。第二个用户将永远无法继续。

处理这个问题的最佳方法是什么?

+0

相关:http://stackoverflow.com/questions/2652082/can-a-http-server-detect-that-a-client-has-cancelled-their-request –

+0

这可能是太有用:连接处理](http://php.net/manual/en/features.connection-handling.php) –

回答

0

望着这PHP手册页:

http://php.net/manual/en/features.connection-handling.php

我引述:

您可以决定是否需要在客户端断开造成 你的脚本将被中止。有时,即使没有远程浏览器接收到输出,也始终让 脚本运行完成,这很方便。但是,当远程客户端断开连接时,脚本的默认行为是 中止。这种行为可以通过ignore_user_abort php.ini指令以及通过 对应php_value ignore_user _abort阿帕奇httpd.conf指令 或与ignore_user_abort()功能来设定 。如果你不告诉PHP 忽略用户中止和用户中止,你的脚本将终止。

一个例外是,如果您已使用 register_shutdown_function()注册了关机功能。使用关闭功能时,当远程用户点击他的STOP按钮时,下次您的脚本尝试输出 时,PHP将检测到连接已被中止 并调用关闭功能。这个关机功能也会在你的脚本结束时被调用,因此如果客户端断开连接,你可以使用 connection_aborted()函数,所以要做 。如果 连接被中止,此功能将返回TRUE

相关问题