From 6fb9e69b0231a43ec80969437efc730f35e095eb Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 27 Jun 2025 20:36:47 +0200 Subject: [PATCH] Warn on http_response_code() after header('HTTP/...') Fixes GH-18582 Fixes #81451 Co-authored-by: Jakub Zelenka --- ext/standard/head.c | 8 ++++++++ sapi/cli/tests/gh18582.phpt | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 sapi/cli/tests/gh18582.phpt diff --git a/ext/standard/head.c b/ext/standard/head.c index ccef4be16bdfd..45a0ba763be37 100644 --- a/ext/standard/head.c +++ b/ext/standard/head.c @@ -375,6 +375,14 @@ PHP_FUNCTION(http_response_code) } RETURN_FALSE; } + + if (SG(sapi_headers).http_status_line) { + php_error_docref(NULL, E_WARNING, "Calling http_response_code() after header('HTTP/...') has no effect"); + // If it is decided that this should have effect in the future, replace warning with + // efree(SG(sapi_headers).http_status_line); + // SG(sapi_headers).http_status_line = NULL; + } + zend_long old_response_code; old_response_code = SG(sapi_headers).http_response_code; diff --git a/sapi/cli/tests/gh18582.phpt b/sapi/cli/tests/gh18582.phpt new file mode 100644 index 0000000000000..0c3cebf71c3d1 --- /dev/null +++ b/sapi/cli/tests/gh18582.phpt @@ -0,0 +1,40 @@ +--TEST-- +GH-18582: Allow http_response_code() to clear HTTP start-line +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +HTTP/1.1 404 Not Found +Host: %s +Date: %s +Connection: close +X-Powered-By: %s +Content-type: text/html; charset=UTF-8 + +
+Warning: http_response_code(): Calling http_response_code() after header('HTTP/...') has no effect in %s on line 3
+404 +403