Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    PHP non mi invia header 404

    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

  2. #2
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Lo status code fa parte del header ma non è proprio un header come gli altri, quindi le due funzioni non te lo restituiscono.

    Cosa ti dà con quel codice?

    Codice PHP:
    header("HTTP/1.1 404 Not Found");
    echo 
    ' ';
    if (!
    headers_sent($filename$linenum)) echo "HEADERS NON INVIATI !!!";
      else echo 
    "Headers already sent in $filename on line $linenum"

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  3. #3
    Grazie per la risposta, ho inserito l'echo prima della funzione di controllo, come da te suggerito:

    [...] Cosa ti dà con quel codice?
    Codice PHP:
    header("HTTP/1.1 404 Not Found");
    echo 
    ' ';
    if (!
    headers_sent($filename$linenum)) echo "HEADERS NON INVIATI !!!";
      else echo 
    "Headers already sent in $filename on line $linenum"
    e il risultato è questo;

    Codice PHP:
    Headers already sent in D:\\...\\htdocs\\...\\404.php on line 33 
    Tuttavia nel mio file sorgente, l'header è in riga num. 26 (vedi screenshot allegato) mentre in riga 33 è il nuovo echo appena aggiunto. Questo mi sembra strano: secondo me si tratta degli header standard che invia in occasione del primo output, mentre l'header 404 non viene inviato quando dovrebbe)

    Roberto
    Immagini allegate Immagini allegate

  4. #4
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Scusa, non ho capito, se headers_sent() ti restituisca true sarebbe quello che stavi cercando di fare, no?

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  5. #5
    A me interessa che venga inviato l'header 404 che imposto io nello script.

    La funzione headers_sent() controlla se e dove gli headers vengono inviati, cosa che naturalmente accade sempre quando inizia il primo output con echo

    Tuttavia il numero di riga restituito dalla funzione dimostra che gli header inviati sono quelli standard al primo output e non il 404 che avevo impostato io alcune righe prima.

    Anche quando controllo l'array degli headers, non trovo lo status 404 che dovrebbe impostare lo script PHP


    Grazie e ciao
    roberto

  6. #6
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Come ho già scritto non si vede lo status code tra gli header. Perché sei convinto che non ti venga inviato?

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  7. #7
    Vorrei verificare che venga inviato correttamente, non c'è un modo?

    Perchè non verrebbe elencato tra gli headers inviati? Hai per caso un riferimento ufficiale che spieghi perché lo Status non viene elencato tra gli headers nel array PHP?

    Grazie e ciao
    R.

  8. #8
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Lo potresti verificare tramite telnet lanciando la richiesta manualmente. Oppure ti puoi installare IEWatch che ti fa vedere lo status di ogni richiesta.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.