How do I make php page return a 503 error (or anyt

2019-01-23 11:14发布

问题:

This question already has an answer here:

  • Set Response Status Code [duplicate] 6 answers

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:

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

When to send HTTP status code?

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

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

header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 300');//300 seconds


回答2:

I worked on a site that had been hacked and had to use HTACCESS to do this.

<IfModule mod_rewrite.c>

 RewriteEngine on

 # let this (iescaped) IP address see the real site:
 # RewriteCond %{REMOTE_ADDR} !^123.45.67.89

 RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]

 RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif|css|js) [NC]

 RewriteRule .* /maintenance.php [R=503,L]

</IfModule>


回答3:

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.



回答4:

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)); ?>


标签: php http