http_response_code()不起作用,总是输出200

时间:2018-01-24 09:26:12

标签: php

CREATE TABLE #Branch (BranchName varchar(10), CustID int);

INSERT INTO #Branch
VALUES
('Branch1',1111),
('Branch1',1111),
('Branch1',2222),
('Branch2',2222),
('Branch2',4444), 
('Branch3',1111),
('Branch4',3333);

WITH FirstCustomer AS(
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY CustID ORDER BY BranchName) AS RN
    FROM #Branch),
Branches AS ( --really you should have a seperate table to store your branches in
    SELECT DISTINCT BranchName
    FROM #Branch)
SELECT B.BranchName,
       COUNT(FC.CustID) AS Customers
FROM Branches B
     LEFT JOIN FirstCustomer FC ON B.BranchName = FC.BranchName
                               AND FC.RN = 1
GROUP BY B.BranchName;

DROP TABLE #Branch;

我有一个页面需要输出echo http_response_code('400'); return "error"; 状态

我设置http&尝试使用邮递员发帖。

  

它总是返回200。

为什么http_response_code(400)无效?

5 个答案:

答案 0 :(得分:4)

也许你在调用http_response_code()之前已经发送了一些输出。 它会在没有警告的情况下静默导致HTTP 200 (它不会发出众所周知的标头已发送)。您可以发送一些输出,但不能超过php指令output_buffering的值(请参阅您的phpinfo页面)。通常它设置为4096字节(4kB)。尝试将php.ini中的output_buffering临时增加到更高的值(不要忘记重新启动webserver)。请注意,output_bufferingPHP_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文档保持一致。但是http_response_code()也适用于字符串 - 我现在已经测试过了,所以字符串不会导致你的问题,因为@DiabloSteve在评论中表示。

答案 1 :(得分:2)

您不需要像以前那样返回函数:

return "error";

答案

您需要像这样退出功能:

http_response_code(400);
exit;

还有echo和类似字符串的错误代码是多余的

答案 2 :(得分:1)

您需要像这样两次致电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;

答案 3 :(得分:0)

之所以会收到200持久的响应代码,是因为在拥有php标签之前,您需要进行一些输入(换行符):

第1行 2号线

,这也可以在php标签之间:

1行 2号线

请确保删除这些输入,否则这些换行符将被视为输出。这就是为什么您之后输入的任何http_response_code(xxx)都没有影响的原因,因为换行符输出表示“ 200 ok”响应。我已经用r-client模拟了您的问题(应该与chrome上的邮递员相同)。

答案 4 :(得分:0)

在我的情况下是

<pre>
<?php
  http_response_code(404);
?>
</pre>

此代码返回200,因为在PHP启动之前,已经发送了 pre 标记

<?php
  http_response_code(404);

成功返回404,因为尚未发送任何内容。

<?php 之前不允许有空格,否则将返回200