2015-11-27 10:35
浏览 75

如何在php-fpm / nginx上停止php脚本执行?

Unfortunately calling php exit() on php-fpm/nginx configuration does not stop the script immediately while file handles might not be closed.

Some developers suggest calling fastcgi_finish_request() but also this does not stop the script.

Others suggest wrapping all code in a catch block:

    class SystemExit extends Exception {}
    try {
       /* PUT ALL THE CODE HERE */
    } catch (SystemExit $e) { /* do nothing */ }

and throwing an exception where code stop is needed:

   throw new SystemExit(); // instead of exit()

This would mean editing all php files to include try/catch block and seems tedious to me.

Are there any other clean solutions?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • drbd65446 2015-11-27 11:33

    So we found out that it's a register_shutdown_function callback that prevents your script from exiting immediately.

    PHP shutdown function is designed to be called on any script shutdown when possible. But it has a feature: if one of shutdown callbacks calls exit — script is exiting without calling any other callbacks.

    So if you really want to skip a shutdown function in some cases, you should register some killer-function as a very first shutdown callback. Inside that killer-function you will check a kind of singleton for state: do we want to exit? — call exit(), otherwise — return.

    function killer_function() {
        if ($someGlobalThing->needToExitRightNow()) {
    // ...
    function exit_now() {

    ($someGlobalThing can be a singleton or some super-global variable or a global registry or whatever you like)

    Then calling exit_now() will do the trick.

    解决 无用
    打赏 举报

相关推荐 更多相似问题