Docker 网络服务器总是 returns 状态 200

Docker web server always returns status 200

我在 php:8.0-apache docker 容器中托管的网络服务器出现问题,总是返回状态代码 200,即使它被设置为不同的值。 容器外的相同代码可以正常工作

我的 php.ini 文件是:

log_errors=On
error_log=/dev/stderr

和php代码是:

... some code ...

http_response_code(400);
exit;

但我收到回复:

HTTP/1.1 200 OK

知道我的设置有什么问题吗?

编辑: docker 文件:

FROM php:8.0-apache

RUN echo "<?php echo '{some json content}'; http_response_code(400); exit; ?>" >> /var/www/html/index.php

COPY php.ini /usr/local/etc/php/

我想出了问题所在:

当我调用 echo "..." 时,已经发送了状态为 200 的 header,因此 http_response_code(400) 被忽略了。

要解决此问题(以及它在我的电脑上使用默认配置的原因)是将 php.ini 中的 output_buffering 设置为某个值,因此不会立即发送输出。

log_errors=On
error_log=/dev/stderr
output_buffering=4096

参见:https://whosebug.com/a/8028987/1557025