tags:

views:

85

answers:

3

A former developer wrote or client-server api in PHP. It simply sends messages as xml using post/response in a very simplistic fashion. The problem is that even when there is an error (ex: invalid arguments passed into the server side) we get a HTTP 200 response with a page like this

<h4>Unknown error!</h4>

In firebug I can see that the actually HTTP response is a 200. How can we send a different response (ie:503) when we programatically detect in our php code that it is appropriate to do so.

+1  A: 

On top of your script (or really, before any output is sent as a response):

<?php header("HTTP/1.0 404 Not Found"); or any other HTTP status code.

chelmertz
This relies on PHP's ability to map the status code from the header type (special-case handling) - it really should be header("HTTP/1.0 404 Not Found", true, 404)
symcbean
@symcbean Nice, I've never noticed that. Thanks!
chelmertz
+2  A: 

Use PHP's header function to send the code (along with the HTTP version and any other headers you need). More complete info:

http://stackoverflow.com/questions/811513/when-to-send-http-status-code

http://php.net/manual/en/function.header.php

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

peachykeen
+1  A: 

A good class for achieving this can be found here: http://www.krisjordan.com/php-class-for-http-response-status-codes/ - use it like this (before any other output):

<?php header(StatusCodes::httpHeaderFor(503)); ?>
Chris