Salve,
ho un problema ad inviare un header 404 Not Found tramite PHP.
Come background alla mia richiesta, faccio riferimento ad un vecchio thread "invio header 404 e regola htaccess" (archivio: "showthread/t-1069384.html"), in cui si diceva:
<quote>
<<... Gli header il tuo script li invia al browser che ha fatto la richiesta, mica ad apache, quindi ovviamente è necessario anche un location se vuoi fare un redirect, ma potresti anche includere il contenuto della pagina 404 direttamente nello script senza bisogno di ulteriori redirect ...>>
</quote>
In effetti, sto provando a gestire il 404 tramite script, e volevo includere il codice da mostrare come messaggio di errore, invece di redirigere ad una pagina statica, tipo 404.html
Prima di mostrare il messaggio tramite echo, invio l'header come solito:
header("HTTP/1.1 404 Not Found");
Sembra che vada tutto bene (se metto un echo prima dell'header, mi mostra il solito warning "Impossibile inviare header perchè output già iniziato...") ma poi mi è venuta l'idea di controllare che l'header sia stato effettivamente inviato:
a) usando dopo l'invio "var_dump(headers_list());" [oppure "print_r(getallheaders())", come consiglia HTML.it], nell'array mostrato non appare l'header dello status;
b) usando la funzione headers_sent() come consigliato nel manuale:
if (!headers_sent($filename, $linenum))
echo "HEADERS NON INVIATI !!!";
else
echo "Headers already sent in $filename on line $linenum";
mi appare la frase "HEADERS NON INVIATI !!!", cioè il risultato della funzione è FALSE;
c) se metto un "exit" dopo l'header, non mi appare la pagina standard di IE per il 404: "Impossibile visualizzare la pagina", ma solo una pagina bianca, come uno script concluso senza output.
Sembra quindi che l'header 404 non venga effettivamente inviato da PHP.
Qualcuno ha qualche idea in proposito?
Grazie e saluti
Roberto

Rispondi quotando
