diff --git a/ext/standard/head.c b/ext/standard/head.c
index ccef4be16bdfd..a765902b448cd 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. This will change in PHP 9.0");
+ // TODO: Uncomment in PHP 9.0
+ // 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..d533689056d3e
--- /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. This will change in PHP 9.0 in %s on line 3
+404
+403