Newsgroup: it.comp.www.php
Titolo: Problema  con due comandi header in una pagina

Buon giorno a tutti,
In uno script php ho la necessita di utilizzare due istruzioni header.
Purtroppo al momento dell'esecuzione, lo script mi va in warning
( Warning: Cannot modify header information - headers already sent by ..)
Come posso ovviare al problema ?
Grazie a tutti.
Saluti.

 Saluti.
Prego.
Saluti,
David
P.S.: a rigor di logica, *dovrebbe* essere così. Però non l'ho testato.
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFI3cI5sXXcRsFI+cRAqV9AJ4gjqDVc+t7ruChxwhGxItlez99hgCfWBg/
BtfeueOorpMzerUNFnA+2cA=
=xEmr
-----END PGP SIGNATURE-----

"Pellix79" <pellix...@NOSPAMtin.it> ha scritto nel messaggio 
news:4523767c$0$39884$4faf...@reader4.news.tin.it...

sicuro di non inviare nulla al browser "prima" oppure "tra" le due chiamate? 
ad esempio righe bianche o altro? semmai prova a postare il codice
Mario
_________________________
WEB: 
www.mario-online.com
________________________________ 

 Mario
Ecco il codice
---------
}
header("Location: mail.php?ok");
exit;
}
else
{
     header("Location: cortesia.php");
}
--------
Cosa ne pensi ?

 
Non capisco :-(
Io i due header li chiamo con la seguente sintassi
-----
header("Location: mail.php?ok");
header("Location: cortesia.php");
----
°Dovrei scriverli cosi ?
---------
header("Header1: mail.php?ok");
header("Header2: cortesia.php");
----
O capito fischi per fiaschi ?

 Cosa ne pensi ?
Lasciando perdere l'altro mio intervento (credevo volessi inviare due
header *contemporaneamente*...).
Una curiosità: perché usi exit (non ha senso...)?
Secondo: puoi postare anche un po' di «contesto»? Cioè... d'accordo, è
un if-then-else, ma cosa c'è attorno? :)
Se prima fai un echo, o qualunque altra cosa che invii dati al client, è
normale che ti dia quel warning...
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFI3rV5sXXcRsFI+cRAqZDAJ4nRk4vl2yRgS5sIEJ/DILncDET7QCdHVhq
aSoWkNIXKa32pIdkRvkKAio=
=gxb1
-----END PGP SIGNATURE-----

"Pellix79" <pellix...@NOSPAMtin.it> ha scritto nel messaggio 
news:45237881$0$39884$4faf...@reader4.news.tin.it...

penso che il problema non è dovuto ai due header, infatti mi pare di capire 
che O viene eseguito header("Location: mail.php?ok");
 OPPURE viene eseguito header("Location: cortesia.php");, piuttosto da 
qualcosa che sta sopra, il Warning dovrebbe riportare una un numero di riga, 
cosa hai nel tuo codice a quella riga?


 
Ecco il messaggio preciso:
-*-----
Warning: Cannot modify header information - headers already sent by 
(output started at C:\Program Files\Apache 
Group\Apache2\htdocs\mail\include\header.php:7) in C:\Program 
Files\Apache Group\Apache2\htdocs\mailing\mail.php on line 118
-----
nella riga 7 del file header.php c'è solo codice html
la riga 118 è quella che vi ho postato in cui c'erano gli header.
Cosa ne pensi ?

 Cosa ne pensi ?
Beh, ovvio che la riga 118 contiene uno dei due header(). Il warning
viene dato quando tenti di usare quella funzione.
Dovresti controllare *prima dell'if*.
Ed è quello che dice il warning: l'output è iniziato alla riga 7...
proprio il "solo html" è un qualcosa che tu invii al client :)
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFI30Y5sXXcRsFI+cRAq79AJ4weM03AP3djdP/pJG1F+bwRLUVRwCglpBq
9XRcyKZkLNAZkRb99PkXGIw=
=F1wa
-----END PGP SIGNATURE-----

 un if-then-else, ma cosa c'è attorno? :)
Si tratta di oltre 500 righe di codice ..
Il primo header è un rimando ad una pagina dopo l'esecuzione di certe 
operazioni.
Il secondo header  manda nella pagina di cortesia se non rileva una 
sessione attiva
Sai darmi qualche altro consiglio.
Grazie ancora.
Ciao

 proprio il "solo html" è un qualcosa che tu invii al client :)
esattamente..;)
ciao


operazioni.
E queste operazioni, hanno un output? Comunque PHP ti dice in quale riga
c'e' il bordello ("output started at line X of file Y").
Leonardo
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

 Come posso ovviare al problema ?
Se questo non e' causato da altri problemi a monte, aumenta o imposta il 
valore della variabile "output_buffering". La puoi impostare nel 
php.ini, in .htaccess o in httpd.conf.
--- .htaccess --
php_value output_buffering 4096
--- php.ini --
output_buffering = 4096
Per esempio, con la configurazione sopra questo codice funziona:
<?php
	# ora si puo' inviare 4096 car. prima degli headers
         echo "Testo inviato prima degli headers\n";
         echo "Testo inviato prima degli headers\n";
         echo "Testo inviato prima degli headers\n";
         header('Content-type: text/plain');
?>
vedi anche: 
http://it2.php.net/manual/it/ref.outcontrol.php#ini.output-buffering
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 Una curiosità: perché usi exit (non ha senso...)?
Perche' non ha senso?


 Perche' non ha senso?
Beh, che senso ha usare un'istruzione exit(), che ha il compito di
terminare l'esecuzione della pagina, quando l'esecuzione è già "terminata"?
Intendo dire che se mandi l'header "Location:" allora non viene eseguito
più il codice che segue l'header, ma il "controllo" viene passato
(definitivamente) alla pagina specificata nell'header.
IMHO quell'istruzione lì non verrà *mai* eseguita, perché la pagina
perde prima il controllo.
Poi sta a vedere come si comporta l'interprete PHP. Se legge (ed esegue)
la pagina riga per riga, allora è come dico io: all'istruzione header()
si cambia pagina, e il resto non viene eseguito. Se legge la pagina in
blocco, e la esegue in blocco, non ho idea di a cosa possa servire
exit(). Dato che abbiamo supposto che legge il codice in blocco, PHP
leggerà comunque l'intero file.
Questo ovviamente tutto IMHO.
Saluti,
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFJKub5sXXcRsFI+cRAlBzAJ9ETvBgUbant/FLgD8rkVfsuRVKjgCeIyIy
w+M88MkhV7roctFkeC+jf+s=
=BQlI
-----END PGP SIGNATURE-----

 > Cosa ne pensi ?
che hai generato un outpot prima di chiamare header(); e difatti è il
messaggio che ti da.
non puoi scrivere nessun tipo di html o di output a video al di sopra
degli header();
se prima di header (righe sopra) generi un qualsiasi output a video
(tramite echo, print o html) l'header non funziona...perche deve essere
eseguito prima di qualsiasi output a video
se hai gia generato codice html anziche header() potresti usare un echo
"<meta http-equiv='REFRESH'..." ma non so se è valido per il tuo
scopo.
esempio:
<html>
<?php
  header("Location:...."); //ERRORE
  echo "<meta htp-equiv='refresh'
content='0;URL=paginaphpdoveandare.php' />";
?>
<body>Ciao</body></html>
ciao
--
Fabrizio yQy

 nell'header.
Non credo sia così. Dopo l'invio dell'header lo script continua ad
essere eseguito. Fai una semplice prova:
file index.php
<?php
header('Location: 
http://localhost/test/index2.php'
);
// Codice per aggiungere un record in una tabella.
?>
e vedrai che richiamando la index.php, oltre a essere ridiretto su
index2.php, il record sarà inserito nella tabella. Dopo aver usato
header() — come redirect — è buona norma usare sempre exit().
Vedi anche 
http://it.php.net/manual/en/function.header.php
Ciao.
-- 
Federico

 Ciao.
Grazie.
Saluti,
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFJNUb5sXXcRsFI+cRAt79AJsEwHkO9lQgiDHmv8txXwSsWSCsyQCgug/I
ylWfEOOVYcuYYIuT62yDITM=
=V2T4
-----END PGP SIGNATURE-----

 ?>
Sicuramente e' cosi'.
Tra l'altro, un tempo - quando c'erano i browser preistorici che non 
sempre riconoscevano l'header "Location: url" - si consigliava di fare 
una cosa del genere:
===================
<?php
	$url = "
http://www.dominio.ext/paginadirimando.html
";
	header("Location: $url");
?>
<html>
<head><title>Redir</title></head>
<body>
<a href="<?php echo $url; ?>">Continua...</a>
</body>
</html>
===================
Male che andasse, l'url di redirezione poteva essere cliccato a mano :)
Ciao
