【问题标题】:How can I execute remaining php code after calling "exit"?调用“exit”后如何执行剩余的php代码?
【发布时间】:2012-07-14 10:17:11
【问题描述】:

客户端如何向服务器发送请求只是为了触发执行,服务器立即发送响应然后执行请求的代码?类似这样:

echo 'the execution is starting';
exit;
execution_function(); // <--- is it possible to this function being executed after exit 

我希望立即响应,以便客户端可以在服务器执行请求时执行其他操作。

【问题讨论】:

  • 你不能这样做。你必须在退出前编写函数;或删除退出;
  • 你不能只调用函数之前 exit吗?调用exit的主要目的,顾名思义,就是结束当前脚本。即使有解决方法,这也是 imo 不应该做的事情之一。
  • Fabricio Matte - 那么在退出前如何响应客户端?

标签: php xmlhttprequest


【解决方案1】:

这是不可能的,原因是当你调用 exit 函数时,PHP 会停止处理之后的任何事情。如果脚本检测到错误,它的正常用法是停止运行,因为它达到成功条件操作的可能性为零。

如果您希望脚本继续运行并执行某些操作,请将您希望它执行的操作放在退出函数之前。

【讨论】:

    【解决方案2】:

    您可以使用register_shutdown_function() 设置一个回调函数,该函数将在 PHP 退出时执行。

    【讨论】:

    • +1 表示正确答案。但请记住,这将由导致程序停止的任何事情触发,包括致命错误。这可能是也可能不是您想要的,但值得留意。
    • 对不起。我会尝试的.. 但是 register_shutdown_function() 在退出之前和响应之前执行
    【解决方案3】:

    我不认为这是可以做到的。

    通常我所做的是将 exec() 调用到另一个 PHP 文件中的另一个外部脚本,命令末尾带有“> /dev/null &”,然后是 exit()。

    这样调用 exec() 的脚本在被调用脚本运行时不会运行。

    【讨论】:

    • 这行得通,但如果您要处理数千个请求,它会有点棘手。
    • 嗨 Jerinho,所以它不起作用?他们在我的情况下工作,其中 PHP 是通过 cron 运行的 CLI 脚本。是的,成千上万的请求需要一些技巧来找出哪些请求首先运行。
    【解决方案4】:

    您可以在 exit() 、 die() 之后使用 register_shutdown_function() , 即使您可以使用此功能将致命错误注册到错误注册日志中。非常方便

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多