2010-05-03 3 views
34

Ein ehemaliger Entwickler schrieb oder Client-Server API in PHP. Es sendet einfach Nachrichten als XML mit Post/Response in einer sehr vereinfachten Art und Weise. Das Problem ist, dass selbst wenn ein Fehler aufgetreten ist (zB: ungültige Argumente in die Server-Seite übergeben wird) ich eine HTTP-200-Antwort mit einer Seite wie dieser kann ichWie mache ich PHP-Seite einen Fehler 503 (oder irgendetwas nicht-200)

<h4>Unknown error!</h4> 

In firebug erhalten sehen, dass die tatsächlich HTTP-Antwort ist a 200. Wie können wir eine andere Antwort (zB: 503) senden, wenn wir in unserem PHP-Code programmatisch erkennen, dass dies angemessen ist.

Antwort

71

Verwenden Sie PHP header Funktion, um den Code (zusammen mit der HTTP-Version und andere Header, die Sie benötigen) zu senden. Vollständigere Informationen:

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 
+7

Warum schreiben Sie die HTTP/1.1-Annahme fest in? Was passiert, wenn der Client HTTP 1.0 verwendet? – Pacerier

+0

@Pacerier also was würdest du insead machen? Wie würde ich dies schreiben, so dass es sowohl HTTP 1.0 als auch HTTP 1.1 behandelt? Alle Beispiele zeigen es wie in der Antwort gegeben – Inigo

+1

Ich denke 'Header ($ _ SERVER [" SERVER_PROTOCOL "]. '503 Service vorübergehend nicht verfügbar');'? – Inigo

2

Am Anfang des Skripts (oder wirklich, bevor irgendeine Ausgabe wird als Antwort gesendet):

<?php header("HTTP/1.0 404 Not Found"); oder andere HTTP status code.

+4

Dies beruht auf PHP in der Lage, den Status-Code aus dem Header-Typ (Sonderfallbehandlung) abzubilden - es sollte wirklich seinen header ("HTTP/1.0 404 Not Found", true, 404) – symcbean

+0

@symcbean Nizza Das habe ich nie bemerkt. Vielen Dank! – chelmertz

3

Ich arbeitete auf einer Website, die gehackt wurde und musste dafür HTACCESS verwenden.

<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>