Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10

    Header(): niente errore warning o_O

    Uno script di questo tipo non dovrebbe restituire un errore warning?
    Codice PHP:
    <html> 
    <?php 
    /* This will give an error. Note the output  * above, which is before the header() call*/
    if($_GET)     
        echo 
    "la funzione header() ha funzionato"
    else     
        
    header('Location: http://localhost/test.php?get=1'); 
    ?>
    Eppure mi esegue la pagina normalmente: dopo il refresh stampa 'la funzione header() ha funzionato'.

    Probabilmente mi sfugge qualcosa, dato che sono un niubbo ed è mezza notte e mezza . Ma cosa?

  2. #2

    Re: Header(): niente errore warning o_O

    Uno script di questo tipo non dovrebbe restituire un errore warning?
    in linea di massima no, perche' ?

    Probabilmente mi sfugge qualcosa
    anche a me: cosa vuoi controllare con if($_GET) ?


    ciao
    danno

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10
    Perchè c'è output prima della chiamata di header: il tag <html>.
    Io ho semplicemente copiato del codice da http://it.php.net/manual/en/function.header.php relativo alla funzione header, ovvero questo:

    Codice PHP:
    <html> 
    <?php 
    /* This will give an error. Note the output  above, which is before the header() call */
    header('Location: [url]http://www.example.com/[/url]');  //
    ?>
    Non restituiva nessun errore e reindirizzava alla pagina.

    Il controllo con l'if è totalmente inutile XD, dato che per verificare il corretto funzionamento della funzione header() avrei potuto mettere come location una qualsiasi url valida. Io invece ho reindirizzato alla stessa pagina d'origine (test.php) -.-" passando una variabile in query string dato che , senza quella, avrebbe aggiornato la pagina infinte volte, o meglio mi avrebbe restituito un errore il browser del tipo:
    "Questa pagina non redireziona in modo corretto: Firefox ha rilevato che il server sta redirezionando la richiesta per questo indirizzo in modo che non possa mai essere completata."

    Insomma, il significato era questo: eseguo sta pagina test.php che contiene una chiamata a header(), il quale passa un paramentro $_GET alla stessa pagina test.php. Se la chiamata di header() funziona correttamente, al refresh della pagina, questa stampa "la funzione header() ha funzionato correttamente".

    Ma il punto è: perchè non dà nessun errore warning nonostante l'output prima?!
    mi riferisco al famoso:
    Warning: Cannot modify header information - headers already sent by...

    Spero di essermi spiegato. Grazie per eventuali risposte

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    magari da qualche parte nella tua configurazione di php (php.ini) c'hai messo la soppressione di tutti i warning. Prova ad aggiungere ad inizio pagina

    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    ?>
    e poi seguita con i tuoi esperimenti
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Tanto per cominciare, potresti avere l'output buffering abilitato, il che eliminerebbe il problema del warning sull'header.

    Poi c'è un altro punto: se tu chiami la pagina passandole un parametro in GET, il test che hai messo risulta vero, quindi non esegue l'istruzione header(). Invece di inventare cose cervellotiche perché non fai semplicemente un redirect a un'altra pagina?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10
    Poi c'è un altro punto: se tu chiami la pagina passandole un parametro in GET, il test che hai messo risulta vero, quindi non esegue l'istruzione header(). Invece di inventare cose cervellotiche perché non fai semplicemente un redirect a un'altra pagina?
    Lo so lo so, che potevo fare il redirect a un'altra pagina, l'ho pure scritto lol, però guarda che anche questo funziona benissimo.
    Io apro la pagina test.php senza passare alcun paramentro in origine, quindi semplicemente localhost/test.php. Alla prima apertura non c'è nessun parametro get passato e quindi eseguira l'header(). Tant'è vero che sulla barra degli indirizzi del browser trovo localhost/test.php?get=1


    Adesso verifico le vostre ipotesi e vi faccio sapere.

    Grazie mille per le risposte .

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Avevo letto a rovescio

    Comunque direi che hai l'output buffering abilitato.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10
    Originariamente inviato da luca200
    Avevo letto a rovescio

    Comunque direi che hai l'output buffering abilitato.
    Si, è proprio quello . Ero sicuro che dietro tutto ci fosse un parametro del php.ini .
    Sul php.ini trovo: output_buffering = 4096.

    Però adesso voglio altre delucidazioni^^.
    Mi pare di capire che con tale settaggio, php tiene in buffer fino a 4kb di dati in output.

    -Una volta superata la soglia dei 4kb, cosa fa? rilascia l'output? Cioè, se ipoteticamente mettessi prima della funzione header() più di 4kb di dati in output, mi darebbe l'errore?

    -E' consigliabile sfruttare la funzionalità o scrivere codice facendo attenzione a non inviare output prima della funzione header()?

    Grazie mille ancora

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da sboby
    -Una volta superata la soglia dei 4kb, cosa fa? rilascia l'output? Cioè, se ipoteticamente mettessi prima della funzione header() più di 4kb di dati in output, mi darebbe l'errore?
    Io non l'ho mai usato e quindi non ho mai fatto prove, ma ad occhio direi che è così

    Per quanto riguarda la domanda dopo, io farei attenzione a non inviare output prima dell'header(). Non è difficile, in generale. Soprattutto se utilizzi un sistema di template

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.