php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #75009 http_response_code() error code support depends on SAPI
Submitted: 2017-07-31 07:17 UTC Modified: 2017-07-31 15:37 UTC
From: czirkos dot zoltan at gmail dot com Assigned:
Status: Verified Package: Apache2 related
PHP Version: 7.0.21 OS: Linux 4.4.0-62-generic #83-Ubunt
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: czirkos dot zoltan at gmail dot com
New email:
PHP Version: OS:

 

 [2017-07-31 07:17 UTC] czirkos dot zoltan at gmail dot com
Description:
------------
The http_response_code() function fails for a nonstandard error code (eg. 210). 500 Internal Server Error is emitted instead.

This only happens with the apache2handler SAPI; eg. Nginx+FPM works fine.


Test script:
---------------
http_response_code(210);
echo "hello";


Expected result:
----------------
Proper error code sent via the server.

Please not that documenting the list of error codes (in the documentation at http://php.net/manual/en/function.http-response-code.php) is not really a solution, as custom error codes can be defined.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-07-31 14:42 UTC] requinix@php.net
-Status: Open +Status: Not a bug
 [2017-07-31 14:42 UTC] requinix@php.net
http_response_code() depends on the SAPI (Apache or FPM+nginx) supporting the code. nginx doesn't mind a custom 210 but Apache does and it (not PHP) substitutes a 500 instead [1].

If you want a custom status then use header(), which Apache handles differently than if you just give the code.

header("HTTP/1.1 210 Whatever That Code Means");


[1] They support 200 OK through 208 Already Reported. Anything 2xx above that will be rejected. See their modules/http/http_protocol.c for more.
https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/http/http_protocol.c?revision=1799890
 [2017-07-31 15:00 UTC] czirkos dot zoltan at gmail dot com
Thank you for the clarification. It might be a good idea to mention this in the documentation; something like "Available response codes depend on the server software used". There's a comment about that (http://php.net/manual/en/function.http-response-code.php#116880), but this is more important than that.
 [2017-07-31 15:37 UTC] requinix@php.net
-Summary: http_response_code() fails on nonstandard error code +Summary: http_response_code() error code support depends on SAPI -Status: Not a bug +Status: Verified -Type: Bug +Type: Documentation Problem
 [2017-07-31 15:37 UTC] requinix@php.net
#116880 is partially correct in that PHP does use that list, but it's only for php-fpm, the built-in dev server, and when running as regular CGI (as far as I can see).

A note along the lines of
  http://php.net/manual/en/function.http-response-code.php#114996
that support depends on the SAPI and how to use header() as a workaround for non-standard codes would be a good idea.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 17:01:32 2024 UTC