• User Attivo

    Problema redirect.php

    Ciao a tutti ho questo problema:
    il seguente codice funziona correttamente su di un sito , ma in un altro , mi da questo errore
    Warning: Cannot modify header information - headers already sent by (output started at /home/bnl12rgk/public_html/vintagesorrento/italia.php:9) in /home/bnl12rgk/public_html/vintagesorrento/italia.php on line **121

    Mi sapete spiegare perche?
    **


  • Super User

    @Piterrey said:

    Ciao a tutti ho questo problema:
    il seguente codice funziona correttamente su di un sito , ma in un altro , mi da questo errore
    Warning: Cannot modify header information - headers already sent by (output started at /home/bnl12rgk/public_html/vintagesorrento/italia.php:9) in /home/bnl12rgk/public_html/vintagesorrento/italia.php on line **121

    Mi sapete spiegare perche?
    **
    Quale codice?
    L'errore indica che effettui il redirect via header() dopo che hai inviato al browser dei dati. Se posti il codice possiamo esserti più utili.


  • User Attivo

    ops non l'avevo scritto.

    header("location: http://www.miosito.com/prodotti.php");


  • Super User

    @Piterrey said:

    ops non l'avevo scritto.

    header("location: http://www.miosito.com/prodotti.php");

    intendevo tutto il codice :D, almeno quello prima della funzione header()


  • User Attivo

    Anche io ho lo stesso identico problema, ma a me dipende dal fatto (fonte internet) che eseguo degli output (chissà dove e come) prima del comando "session_start();".
    Purtroppo questo non succede su altervista.org ma succede sullo spazio web di un utente a cui (ovviamente) non ho accesso per fare dei test.

    Spero possa essere utile,

    greybear


  • User Attivo

    Ciao Piterrey,

    Bisognerebbe capire le operazioni che vengono fatte nelle tue pagine prima del comando header.

    Sei sullo stesso hosting?


  • User Attivo

    Allora il sito dove il codice funziona e' in italia (.it), mentre l'altro e' forse in america(.com), La pagina e' una pag. di login, dove se avviene l'accesso, il form di login punta alla pagina stessa dove compare la scritta "benvenuto nell'area privata", allora inserendo il redirect, mi salta direttamente alla pagina specificata nell'header, ma in questo caso mi da' l'errore di cui sopra.
    Il codice in entrambi i siti e' lo stesso.Comunque ecco il cod.

    //inizio pag.
    <?
    session_start();
    ?>

    poi il cod di controllo utente

    <form action="<?=$PHP_SELF?>" method="post" name="login" class="Stile8" id="login">
    E-Mail
    <input name="utente" type="text" class="Stile8" size="15" />
    Password
    <input name="password" type="text" class="Stile8" size="15" /><br />
    <input name="Submit" type="submit" class="Stile8" value="Accedi" />

    <? }
    

    if(isset($_POST["utente"])){
    if (check($_POST["utente"],$_POST["password"])){
    $_SESSION["utente"] = $_POST["utente"];
    $_SESSION["password"] = $_POST["password"];
    header("location: http://www.vintagesorrento.com/prodotti.php");
    }else{
    form_login();
    }
    }else{
    form_login();
    }
    ?></form>


  • Super User

    @Piterrey said:

    Allora il sito dove il codice funziona e' in italia (.it), mentre l'altro e' forse in america(.com), La pagina e' una pag. di login, dove se avviene l'accesso, il form di login punta alla pagina stessa dove compare la scritta "benvenuto nell'area privata", allora inserendo il redirect, mi salta direttamente alla pagina specificata nell'header, ma in questo caso mi da' l'errore di cui sopra.
    Il codice in entrambi i siti e' lo stesso.Comunque ecco il cod.

    //inizio pag.
    <?
    session_start();
    ?>

    poi il cod di controllo utente

    <form action="<?=$PHP_SELF?>" method="post" name="login" class="Stile8" id="login">
    E-Mail
    <input name="utente" type="text" class="Stile8" size="15" />
    Password
    <input name="password" type="text" class="Stile8" size="15" /><br />
    <input name="Submit" type="submit" class="Stile8" value="Accedi" />

    <? }
    

    if(isset($_POST["utente"])){
    if (check($_POST["utente"],$_POST["password"])){
    $_SESSION["utente"] = $_POST["utente"];
    $_SESSION["password"] = $_POST["password"];
    header("location: http://www.vintagesorrento.com/prodotti.php");
    }else{
    form_login();
    }
    }else{
    form_login();
    }
    ?></form>

    Se questo:
    [php]
    poi il cod di controllo utente

    <form action="<?=$PHP_SELF?>" method="post" name="login" class="Stile8" id="login">
    E-Mail
    <input name="utente" type="text" class="Stile8" size="15" />
    Password
    <input name="password" type="text" class="Stile8" size="15" /><br />
    <input name="Submit" type="submit" class="Stile8" value="Accedi" />

    <? }[/php]
    

    Viene inviato ad output è normale che ti dia errore


  • User Attivo

    Ma quale potrebbe essere il motivo per cui sul server italiano gli funziona e sull'altro no?

    A me succede la stessa cosa :mmm: sul server di altervista funziona e su uno in sudamerica mi da quel tipo di errore :bho:

    Purtroppo per fare prove devo aspettare che la persona che sta usando il mio cms faccia le prove che gli sottopongo e la cosa va per le lunghe ...

    grazie,
    greybear


  • Super User

    @greybear said:

    Ma quale potrebbe essere il motivo per cui sul server italiano gli funziona e sull'altro no?

    A me succede la stessa cosa :mmm: sul server di altervista funziona e su uno in sudamerica mi da quel tipo di errore :bho:

    Purtroppo per fare prove devo aspettare che la persona che sta usando il mio cms faccia le prove che gli sottopongo e la cosa va per le lunghe ...

    grazie,
    greybear
    Per esempio se la pagina viene compressa prima di essere inviata al browser, l'errore non viene visualizzato.


  • User Attivo

    L'unica spiegazione secondo me e' la versione del php, ma parlo sempre da inesperto.


  • User Attivo

    Anche io non sono esperto, ma non avendo info sulla versione del php sul sito estero non posso fare ipotesi. Quello che so è che su altervista il PHP è della serie 4.x .
    Per esempio lo stesso cms l'ho messo su Lycos e qui non funziona proprio.

    Sulla barra url anche cambiando pagina rimane lo stesso url.
    Quando faccio l'autenticazione non entra mai
    Prima che si carica la pagina (anche se viene visualizzata tutta) bisogna aspettare diverse decine di secondi (forse aspetta tutti i banner ?).

    Un vero schifo!

    Credo quindi che le cause siano due:

    1. gli script (il mio cms) non siano fatti a regola d'arte e quindi in alcuni host siano tollerati ed altri no (vedi: differente configurazione apache+php)
    2. alcuni host hanno qualche restrizione particolare.

    Parafrasando "qualcuno" è il caso di dire: imparare, imparare, imparare! :mmm:

    ciao,
    greybear


  • User Attivo

    Ho dimenticato di dire che anche in locale (usando fedora5) funziona perfettamente ....
    I settings di apache (2.2.2) e php (5.1.6) sono quelli di default.


  • User Attivo

    EUREKA! EUREKA!

    siiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

    ; Output buffering allows you to send header lines (including cookies) even
    ; after you send body content, at the price of slowing PHP's output layer a
    ; bit.  You can enable output buffering during runtime by calling the output
    ; buffering functions.  You can also enable output buffering for all files by
    ; setting this directive to On.  If you wish to limit the size of the buffer
    ; to a certain size - you can use a maximum number of bytes instead of 'On', as
    ; a value for this directive (e.g., output_buffering=4096).
    ;output_buffering = 4096
    
    ```disabilitando output_buffering ho riprodotto il problema in locale!!
    
    il segreto quindi è qui:
    
    "You can enable output buffering during runtime by calling the output buffering functions."
    
    Come si fa, ayrton?
    
    :D grazie,

  • User Attivo

    Fatto, fatto, fatto, fatto....
    :fumato: no, non io... maliziosetti 😄

    Ho fatto, adesso funziona tutto. Per chi non lo sapesse (ovvero quelli come me), il buffer di cui sopra si può riattivare (credo localmente) mettendo in testa allo script la funzione:

    ob_start();

    Nel caso mio l'ho messa in testa al file index.php perchè è quello che poi "include" su richiesta tutti gli altri script, incluso quello per il login che probabilmente dovrebbe starne fuori.

    Piterrey, forse il tuo problema è lo stesso... Facci sapere 😉

    Ayrton, ci sono controindicazioni o miglioramenti a quello che ho fatto?

    ciao e grazie,
    greybear


  • User Attivo

    scusate ma sono un poo' tonto in php
    potete farmi un esempio di codice?
    grazie


  • User Attivo

    Il mio index.php adesso inizia così:


    <?php
    ob_start();
    // da qui in poi tutto lo script
    ?>

    ed in questo modo abilito il buffering per il mio cms anche se è disabilitato nel php.ini
    Adesso sto facendo qualche verifica nel caso il buffering sia abilitato...
    ciao,
    greybear


  • Super User

    @greybear said:

    Fatto, fatto, fatto, fatto....
    :fumato: no, non io... maliziosetti 😄

    Ho fatto, adesso funziona tutto. Per chi non lo sapesse (ovvero quelli come me), il buffer di cui sopra si può riattivare (credo localmente) mettendo in testa allo script la funzione:

    ob_start();

    Nel caso mio l'ho messa in testa al file index.php perchè è quello che poi "include" su richiesta tutti gli altri script, incluso quello per il login che probabilmente dovrebbe starne fuori.

    Piterrey, forse il tuo problema è lo stesso... Facci sapere 😉

    Ayrton, ci sono controindicazioni o miglioramenti a quello che ho fatto?

    ciao e grazie,
    greybear
    Nessuna controindicazione. Io di solito la utilizzo per inviare al browser la pagina compressa.

    Comunque se si volesse abilitare l'output_buffering lo si potrebbe fare via .htaccess


  • User Attivo

    scusa , ma ob_start lo inserisco al posto di session start?


  • User Attivo

    Io l'ho messo come prima riga del primo file chiamato dal server e cioè index.php

    Tu devi regolarti con i tuoi script oppure cambiare il file .htaccess ma non so come si fa.