diff --git a/frankenphp.c b/frankenphp.c index f3d085e6d..d09c1a8e5 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -455,6 +455,9 @@ int frankenphp_update_server_context( ctx = (frankenphp_server_context *)SG(server_context); } + // It is not reset by zend engine, set it to 200. + SG(sapi_headers).http_response_code = 200; + ctx->main_request = main_request; ctx->current_request = current_request; diff --git a/frankenphp_test.go b/frankenphp_test.go index 2c1e5c681..eee4e0970 100644 --- a/frankenphp_test.go +++ b/frankenphp_test.go @@ -246,6 +246,12 @@ func testResponseHeaders(t *testing.T, opts *testOptions) { resp := w.Result() body, _ := io.ReadAll(resp.Body) + if i%3 != 0 { + assert.Equal(t, i+100, resp.StatusCode) + } else { + assert.Equal(t, 200, resp.StatusCode) + } + assert.Contains(t, string(body), "'X-Powered-By' => 'PH") assert.Contains(t, string(body), "'Foo' => 'bar',") assert.Contains(t, string(body), "'Foo2' => 'bar2',") diff --git a/testdata/response-headers.php b/testdata/response-headers.php index c994bf0f3..3444a651a 100644 --- a/testdata/response-headers.php +++ b/testdata/response-headers.php @@ -7,7 +7,9 @@ header('Foo2: bar2'); header('Invalid'); header('I: ' . ($_GET['i'] ?? 'i not set')); - http_response_code(201); - + if ($_GET['i'] % 3) { + http_response_code($_GET['i'] + 100); + } + var_export(apache_response_headers()); };