【问题标题】:PHP How to respond to HTTP Request and continue processing?PHP 如何响应 HTTP 请求并继续处理?
【发布时间】:2012-06-18 16:25:15
【问题描述】:

我正在使用用于执行回调请求的支付网关的 API。 发出回调请求时,网关希望我回复“OK”。 没有更多或更少。这并不意味着 html 呈现响应。只是带有这两个字母的回调文件。请注意,这并不意味着它需要 HTTP 状态代码 200/OK...它需要“OK”一词的实际数据(而不是标头)。

所以这行不通:

<html><body>OK</body></html>

这将起作用:

<?php echo "OK"; ?>

但是,在我发回 OK 后,我需要在服务器端做一些事情,然后将浏览器页面重定向到另一个页面。但是当我尝试这样做时:

<?php
echo "OK";
header('Location: http://www.store.com/success.php');
exit;
?>

网关忽略回显“OK”,而是从我重定向到的 success.php 页面中读取 html。

那么我怎样才能只发回 OK 但继续做我这边的事情呢?

谢谢

【问题讨论】:

  • 如果先发送Location: 标头会怎样?
  • 在正文中发送内容后,您无法更改/添加 HTTP 标头。
  • 同样的结果。它仍然获取重定向页面的html
  • 看来你走错路了,你应该通过服务与网关对话。
  • 如果一个API调用你的页面,重定向浏览器的目的是什么?听起来他们遵循重定向但仍然期待OK 响应。您需要做多少事情(即 1 秒的 5 分钟处理时间)?如果它很短,只需执行它然后输出 OK,否则您将需要在后台生成另一个进程。如果你使用 PHP-FPM,那么你会得到函数fastcgi_finish_request(),它可以让你终止请求并继续处理。

标签: php http response.redirect http-status-code-200


【解决方案1】:

您不能发送内容然后重定向。重定向标头设置必须单独完成。

【讨论】:

  • 感谢您的回答.. 我担心这个.. 好的.. 我会尝试与网关交谈并询问他们在这种情况下人们应该做什么。谢谢
【解决方案2】:

你可以尝试使用flush();强制php写出OK。

【讨论】:

【解决方案3】:

是否可以使用 javascript 或元刷新标记将重定向移动到客户端?

【讨论】:

    【解决方案4】:

    在您发送OK 之前,您可以通过命令行调用 PHP 以使 PHP 表现得像受到多重威胁一样。

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 2014-04-23
      • 2020-02-24
      • 2013-06-22
      • 2011-02-23
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多