Search the blog

What HTTP status code does PHP send in the event of a problem? The answer is: it depends.

The main errors you will come across are parse, fatal, notice and warning. Parse and fatal stop the script, notice and warning don’t.

If any content is sent to the browser then a 200 OK code is always sent regardless of whether there was an error not. The differences occur once you set display_errors to off.

Notices and warnings will never cause a 500 server error but once display_errors is set to off, fatal and parse errors will cause a 500 server error.

The code below demonstrates this.

Note that an easy way to get HTTP status codes in the terminal is with curl -s -o /dev/null -w "%{http_code}\n" https://www.domain.com/test.php

error_reporting(-1);
ini_set('display_errors', 0); // Display errors must be off else you will get a 200 code if PHP outputs a message

// Only run one of the following lines at a time
// The error codes below assume display_errors = off else they all output 200 because content was sent to the browser

// (200 HTTP status code) Warning: scandir(I do not exist): failed to open dir: No such file or directory
scandir('I do not exist');

// (200 HTTP status code) Notice: Undefined variable: foo
$foo += 1;

// (500 HTTP status code) Fatal error: Call to undefined function foo()
foo();

// (500 HTTP status code) Parse error: syntax error, unexpected '$bar' (T_VARIABLE)
$foo = 1 $bar =
Tim Bennett is a freelance web designer from Leeds. He has a First Class Honours degree in Computing from Leeds Metropolitan University and currently runs his own one-man web design company, Texelate.