2010-05-03 8 views
34

Un antiguo desarrollador escribió o API de cliente-servidor en PHP. Simplemente envía mensajes como xml usando post/response de una manera muy simplista. El problema es que incluso cuando hay un error (por ejemplo: argumentos no válidos pasado en el lado del servidor) obtenemos una respuesta HTTP 200 con una página como esta¿Cómo puedo hacer que la página php devuelva un error 503 (o cualquier cosa que no sea 200)

<h4>Unknown error!</h4> 

En firebug puedo ver que la realidad respuesta HTTP es a 200. ¿Cómo podemos enviar una respuesta diferente (es decir, 503) cuando detectamos programáticamente en nuestro código php que es apropiado hacerlo?

Respuesta

71

Uso de PHP header para enviar el código (junto con la versión de HTTP y otros encabezados que necesita). información más completa:

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

¿Por qué codifica la suposición HTTP/1.1 en? ¿Qué sucede si el cliente está utilizando HTTP 1.0? – Pacerier

+0

@Pacerier entonces, ¿qué harías insead? ¿Cómo escribiría esto para que cubra tanto HTTP 1.0 como HTTP 1.1? Todos los ejemplos lo muestran como se da en la respuesta – Inigo

+1

Supongo 'encabezado ($ _ SERVER [" SERVER_PROTOCOL "]. '503 Servicio temporalmente no disponible');'? – Inigo

2

En la parte superior de la secuencia de comandos (o en realidad, antes de cualquier salida se envía como una respuesta):

<?php header("HTTP/1.0 404 Not Found"); o cualquier otro HTTP status code. La función del

+4

Esto se basa en la capacidad de PHP para asignar el código de estado del tipo de cabecera (manejo de casos especiales) - lo que realmente debe ser cabecera ("HTTP/1.0 404 Not Found", es cierto, 404) – symcbean

+0

@symcbean Niza Nunca lo había notado ¡Gracias! – chelmertz

3

Trabajé en un sitio que había sido pirateado y tuve que usar HTACCESS para hacerlo.

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