Newsgroup: it.comp.www.php
Titolo: Script di richiesta file e header...

Ciao a tutti.
Seguendo alla lettera (praticamente facendo un copia-incolla) le istruzioni
pubblicate sul manuale di PHP, ho preparato uno script per permettere ad un
utente di scaricare o vedere nel browser un file posto in una directory non
condivisa.
Tutto funziona a meraviglia, ma quando richiedo un documento, puntualmente
visualizzato o scaricato senza problemi, e successivamente richiedo
nuovamente una pagina, compare il seguente messaggio:
----------------------
Warning: Cannot modify header information - headers already sent by (output
started at E:\WWWTest\filereq.php:91) in E:\WWWTest\filereq.php on line 94
----------------------
Lo script di cui parlo, modificato per le mie esigenze ma non nella
sostanza, è il seguente:
----------------------
$fn=fopen($filepath,"rb");
if (isset($_SERVER["HTTPS"]))
{
 /**
 * We need to set the following headers to make downloads work using IE in
HTTPS mode.
 */
 header("Pragma: ");
 header("Cache-Control: ");
 header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT");
 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
 header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
 header("Cache-Control: post-check=0, pre-check=0", false);
}
else if ($disposition == "attachment")
{
 header("Cache-control: private");
}
else
{
 header("Cache-Control: no-cache, must-revalidate");
 header("Pragma: no-cache");
}
header("Content-Type: $mime");
header("Content-Disposition:$disposition; filename=\"$filename\""); //
".trim(htmlentities($filename))."
header("Content-Description: \"$filename\""); //
.trim(htmlentities($filename))
header("Content-Length: ".$size);
while(!feof($fn))
{
 $buffer = fread($fn, 1024*6); //speed-limit 6kb/s
 print $buffer;
}
header("Connection: close");
fclose($fn);
----------------------
Qualcuno ha qualche idea in merito?
Grazie e ciao!
Francesco

 sostanza, h il seguente:
Il sintomo e' evidente, quale e' la riga 94?
Stai inviano all'output buffer dei dati e successivamente hai tentato
di invare degli header.
-- 
I'am what I'am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1

 di invare degli header.
Certo! Quando ho finito di mandare il file e l'operatore richiede nuovamente
una qualsiasi pagina, il server rimanda anche gli header!
Ciao!
Francesco

 nuovamente una qualsiasi pagina, il server rimanda anche gli header!
E' evidente che non conosci come funziona il protocollo HTTP.
http://url.repository.biz/go/r
Pubblica da qualche parte il codice dello script e posta qui il link.


> Pubblica da qualche parte il codice dello script e posta qui il link.
E' quello che ho già postato.
Francesco

 E' quello che ho gi` postato.
Ok, e quale e' la riga 94?
Lo script che hai postato e' di righe!


 Ok, e quale e' la riga 94?
Come ho già scritto, la riga 94 è la 94a riga dello script che chiamo
SUCCESSIVAMENTE all'invio del file richiesto ed inviato tramite lo script
che vedi.
Contiene una banalissima PRINT; ti dirò di più! Cambiando lo script di
destinazione, ossia il link su cui clicco DOPO che il file è stato inviato,
il numero della riga CAMBIA!
Ti dirò di più: La riga 94 nello script che invia il file e di cui hai visto
lo spezzone più significativo, NON ESISTE!
Non posso darti il link poiché è su un sito intranet il cui contenuto è
riservato.
Francesco

 h riservato.
Posta il codice. L'errore e' nel secondo script. Non ti ho chiesto il
link, ma:
[quoto]
Pubblica da qualche parte il codice dello script e posta qui il link.
[/quoto]


Ti posso fare una domanda spassionata?
Si?
Bene: Sei un ingegnere?
Francesco

> header("Connection: close");
Questa istruzione č il problema!
Non mi chiedere perché ma quando l'ho soppressa lo script non ha piů
manifestato problemi.
Francesco

 Bene: Sei un ingegnere?
No.


 manifestato problemi.
Non serve che te lo chiedo, la risposta la trovi nella prima risposta
che ti ho dato:
[quoto _mvLb.242688$
e6.95...@twister2.libero.it
]
Stai inviano all'output buffer dei dati e successivamente hai tentato
di invare degli header.
[/quoto]


 [/quoto]
Domanda idiota: come mai allora non mi hai citato immediatamente
quell'istruzione??
Francesco

 quell'istruzione??
Per il semplice fatto che non sapevo quale fosse la riga 94, lo script
che hai postato era di 40 righe.


 che hai postato era di 40 righe.
In effetti ti ho detto che la riga 94 su quello script NON esiste!!!
Lo script ha solo 72 righe!
La riga 94 è sullo script che viene richiamato DOPO quello di richiesta
file...
Francesco