http_response_code()不起作用,始终输出200

Ben*_*n W 4 php

echo http_response_code('400');
return "error";
Run Code Online (Sandbox Code Playgroud)

我有一个页面需要输出http状态

我设置http_response_code(400)并尝试使用邮递员发布。

它总是返回200。

为什么http_response_code不工作?

mik*_*kep 6

也许您在调用http_response_code()之前已经发送了一些输出。它会无提示地导致HTTP 200静默运行(不会发出众所周知的标头已发送)。您可以发送一些输出,但不能超过php指令的值output_buffering(请参见phpinfo页面)。通常将其设置为4096字节(4kB)。尝试将output_bufferingphp.ini 临时增加到更高的值(不要忘记重新启动Web服务器)。请注意,该output_buffering类型是类型PHP_INI_PERDIR,并且不能在运行时更改,例如通过ini_set()。

PHP_INI_PERDIR: Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini

我建议使用整数而不是字符串:http_response_code(400)...只是为了与PHP doc保持一致。但是,http_response_code()对于字符串也可以很好地工作-我现在已经对其进行了测试,因此字符串不会引起您的问题,如@DiabloSteve在注释中指示的那样。


小智 -4

你需要http_response_code像这样调用两次

http_response_code(400); // this will get previous response code 200 and set a new one to 400
echo http_response_code(); // this will get previous response code which is now 400
return;
Run Code Online (Sandbox Code Playgroud)

  • 这完全是无稽之谈。 (33认同)
  • @Itry 我是说这个答案是无稽之谈。您肯定不需要调用它两次才能使其工作。 (4认同)
  • 问题是我使用邮递员发帖,它显示状态为 200 (2认同)
  • @itry“返回”意味着函数将其返回给调用者(即您的代码)。它并不意味着为 HTTP 响应输出的状态代码中的“返回”。您可以使用此函数来检查和/或设置将用于 HTTP 响应的状态代码。**你_不必_两者都做。** (2认同)