Newsgroup: it.comp.www.php
Titolo: header...

Ciao a tutti,
c'è un modo alternativo all'header per caricare una pagina?
Nel caso specifico ho una riga del tipo:
        header("location: miofile.php?action=addentry");
e ricevo un errore del tipo:
Warning: Cannot modify header information - headers already sent by (output
started at /path/miofile.php:9) in /path/miofile.php on line xyz
Come posso risolvere?
Cooper.
-- 
BlueWare WebAgency
 [web] 
http://www.blueware.it
 [icq] 146781935

 started at /path/miofile.php:9) in /path/miofile.php on line xyz
Questa è una domanda da faq! Hai provato a vedere li? Ormai lo sanno
tutti...

"Ludovico Grossi (LAMASE)" <ooost...@libero.itooo> ha scritto nel
messaggio news:bs141b$lvp$1...@newsreader.mailgate.org...

Ok chiedo scusa per la domanda... da faq! Ma almeno... potresti darmi un
link di riferimento... tutti quelli della "faq della domenica" rimandano a
link e link... ma non trovo la risposta alla domanda da faq....
Grazie in anticipo :)


 ma non trovo la risposta alla domanda da faq....
Questo potrebbe esserti d'aiuto ;-)
http://php.dopoil.com/faq.php?cantAddHeader
Ciao.
-- 
Federico R.


Il link è utile, ma non risolve il problema, cioè so bene che in header non
deve essere preceduto niente...
...il problema è un altro.. che dovrei sostituire quella istruzione con un
altra che produca il caricamento della pagina... considerando il fatto che
prima di questa chiamata c'è già del codice a priori...
In altre parole, ho inserito un blocco del tipo:    <BLOCCO1> ... </BLOCCO1>
in un altro blocco piu esterno:  <BLOCCO2> ... </BLOCCO2> e quando entra in
blocco1, si deve caricare prima blocco2...
...ecco per cui l'header che si trova in blocco1.. non va piu bene... perchè
nella creazione della pagina c'è anche blocco2...
Non so se mi sono spiegato...
Rimango in attesa di riscontri, grazie ancora,


 prima di questa chiamata c'è già del codice a priori...
Ok, allora credo che tu debba ricorrere a javascript con qualcosa del
genere:
<script language="JavaScript" type="text/javascript">
	<!--
	location = 'pagina_a_cui_reindirizzare.htm';
	//-->
</script>
Però non sono un esperto e magari c'è una soluzione migliore.
Ciao.
-- 
Federico R.

 ha scritto nel messaggio
news:ff2bcxyd2pj8.1gvzpyex1q55i$.dlg@40tude.net...

Si infatti una soluzione in javascript potrebbe risolvere il problema, ma io
cercavo qualcosa direttamente in php.
Mi sembra strano che non ci sia nulla che faccia al caso specifico.
Cmq grazie ancora :)
Cooper


 Come posso risolvere?
Bufferizza l'output. Guarda l'esempio che c'è sul settaggio del 
cookie... con header è la stessa storia.
http://it.php.net/manual/it/ref.outcontrol.php
Usa location in modo corretto:
header("location: 
http://www.pincopallino.com/miofile.php?action=addentry
");
---
In un qualsiasi insieme di dati, la cifra cosi' evidentemente corretta 
da non richiedere un controllo e' l'errore.

"Ic^Å^rO" <TOGLIicaro...@MAIUSCOLEfreemail.it> ha scritto nel
messaggio news:ca%Eb.198976$vO5.7...@twister1.libero.it...
Grazie intanto per la risposta, dunque l'errore iniziale l'ho risolto sulla
base del consiglio dato da LAMASE, sostituendo una riga del tipo:
     header("location: guestbook.php");
all'interno di un blocco php, con una riga del tipo:
    echo "<script language=\"javascript\" type=\"text/javascript\">
location.href = \"guestbook.php\";</script> ";
e in effetti cosi non ottengo piu quell'errore iniziale. Tuttavia mi si
presenta un altro errore alquanto strano... o meglio, se uso netscape
l'errore non si presenta, se uso explorer si.
In breve per rendere l'idea, sul sito: 
www.italchat.it
 alla sezione
Guestbook, ho integrato "Justice Guestbook 1.2". Quando vado a cliccare su:
"aggiungi un nuovo messaggio al guestbook" mi appare un errore in cui chiede
di aggiornare il browser... se aggiorno (cliccando su aggiorna) procede
avanti, e le volte successive non da piu errore...
Da cosa può dipendere?
Ripeto su netscape (ultima versione) non mi da alcun errore e funziona alla
grande, e ancora mi viene dato solo quando accedo la prima volta alla
pagina...
Rimango in attesa di riscontri,
Cordialmente, Cooper.


 [cut]
Ti ho risposto inaugurando un nuovo ramo del 3d proprio perchč avevi 
specificato di non voler ricorrere a javascript, cercando una soluzione 
invece all'interno di php.
---
Se non puoi convincerli, confondili...


Si infatti, ma fino a quel momento non avevo altre soluzioni, interessante
il tuo intervento, solo mi ha spiazzato un po'... Infatti non ho capito bene
cosa intendevi dire. Cioè a occhio mi è sembrato piu complicato di quanto
pensassi.
La soluzione in php sarebbe preferibile, m vorrei avere maggiori elementi
per capire meglio il tutto.
Intanto allo stato attuale ho quel problema di cui accennavo, e spero di
risolvere presto.
Grazie ancora :)


 pensassi.
Errore:
<?php
echo "Hello\n";
header("location:
http://www.pincopallino.com/miofile.php
");
?>
Va... e normalmente genera la pagina piů velocemente:
<?php
ob_start("ob_gzhandler");
echo "Hello\n";
header("location:
http://www.pincopallino.com/miofile.php
");
ob_end_flush();
?>
Ovviamente l'esempio in questione non ha molto senso (non avrebbe senso 
produrre in output quell'hello dal momento che non verrebbe 
visualizzato.. visto il reindirizzamento della pagina) ma il principio č 
molto semplice. Niente di complicato quindi.
---
"Basta con questa vita, voglio farmi una famiglia". "Esagerato... fatti 
solo la piů carina di tutta la famiglia" (Alessandro Bergonzoni).

 visualizzato.. visto il reindirizzamento della pagina)
...il che mi ha fatto sorgere il dubbio. Perchè nel mio caso specifico, la
pagina deve caricarsi normalmente la prima volta e successivamente deve
ricaricarsi eseguendo l'altra porzione di codice contenuta in essa, un
esempio:
<?php
    // codice 1
   if ($a='on') {
         // codice 2
         header("location: pagina.php?a=on");
    }
   if ($a='off') {
        // codice 3
         header("location: pagina.php?a=off");
   }
 // codice 4
?>
...ecco questo il caso in cui mi trovavo... quindi nel modo suggerito da te
apportando quelle modifiche, come dovrei comportarmi nel caso specifico?
devo cioè definirne uno unico... o uno per ogni blocco?
Grazie ancora, Cooper.


 devo cioè definirne uno unico... o uno per ogni blocco?
Vedi le modifiche sopra.
In pratica ob_start() prima di produrre qualsiasi output.
---
Quando si trova e si corregge un errore, si vedra' che andava meglio prima.

 Cooper
Non è affatto strano, il php viene eseguito, come sai, prima di arrivare al
client, quindi per via delle *restrizioni* del protocollo http (gli header
vanno in testa) non puoi mandare una riga di intestazione quando stai già
mandando il corpo della pagina.
è come se il server dicesse al browser
HEADER: ok, eccoti la pagina richiesta:
CORPO: <html><body>blablabla...
HEADER: no, scusa, mi sono sbagliato, la pagina che mi hai richiesto è da
un'altra parte =)
Ad ogni modo puoi controllare tutto l'output con le funzioni "ob" (output
buffering - vedi ob_start())
Dovresti bufferizzare tutta la pagina in modo che se il tuo script ci
ripensa puoi ancora modificare le intestazioni.
Ad ogni modo quando si hanno problemi di questo tipo significa che il
software... può essere migliorato, spostando ad esempio queste parti
"critiche" prima di tutto.
Ludovico Grossi

SCUSATE, non avevo visto i messaggi successivi...