Problema con header

ieldna

Nuovo Utente
26 Giu 2010
19
0
0
Genova
Buon giorno a tutti, sono nuovo e vi pongo già una domanda:

Ho un dominio su aruba sul quale gestico un sito. Recentemente ho messo una sezione download dove l'utente con il classico tastino download può scaricare il file scelto.
Il mio problema consiste nell'utilizzo degli header, in particolare di header("Content-Length: blabla");

Infatti voglio inserire quella informazione in modo che il browser capisca quanto pesi il file e possa dare una stima del tempo necessario per il download. Il fatto che se inserisco quella riga di codice il file zip scaricato, alla fine del download risulta corrotto, con qualunque programma di archiviazione, ho navigato un po' per il web ma non ho trovato errori simili oppure non ho cercato le parole giuste.

Qualcuno sa darmi una dritta o una soluzione al mio problema?


Qua la porzione di codice che uso per il download:

PHP:
    $file = "files/file_da_scaricare.zip";
    header('Content-Description: File Transfer');
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename=mio_bel_file.zip');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    readfile($file);
 
Ultima modifica:

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao, io ho provato questo script da me, sia in locale che su server (aruba tra l'altro) e funziona alla grande. Può darsi che il file .zip è stato uplodato male, riprova con ftp a volte succede
 

ieldna

Nuovo Utente
26 Giu 2010
19
0
0
Genova
E' quello che ho pensato all'inizio. Il fatto che scaricato dal browser mi dà l'errore, ma via ftp se lo salvo sul computer non mi dà nessun problema.
Anzi per essere più precisi a me personalmente non viene scaricato corrotto e ad alcuni miei amici funziona, ma a molti utenti risulta comunque corrotto, escludo a priori la loro incapacità per il fatto che cominciano ad essere numerosi a segnalarmelo.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
giusto per curiosità, il problema si verifica con tutti i browser?
 

ieldna

Nuovo Utente
26 Giu 2010
19
0
0
Genova
Si verifica con tutti i browser, vi dirò di più, adesso ho risolto facendo link diretto al file con

PHP:
header("Location: posizione_file_da_scaricare");

e funziona perfettamente ma mi chiedo perchè il file mi risultava corrotto con l'altro metodo!
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
più che altro mi chiedo perché in certi casi risultasse corrotto e in altri no..
 

ieldna

Nuovo Utente
26 Giu 2010
19
0
0
Genova
Non ne ho la minima idea, ed è una cosa che odio troppo xD comunque adesso sono riuscito a risolvare il problema, ho messo il codice che gestisce il download in un altra pagina e va magicamente, boh!!!! Meglio così. =)
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
se mail dovessi riuscire a trovare l'origine del problema faccelo sapere:byebye:
 

ieldna

Nuovo Utente
26 Giu 2010
19
0
0
Genova
Credo, ma non ne sono sicuro che il problema fosse causato dal fatto che nella stessa pagina del download avevo inserito il codice per il download e per arrivare a quella pagina si passa attraverso un sistema di frame in php, ma non ne sono sicuro =)
 

ieldna

Nuovo Utente
26 Giu 2010
19
0
0
Genova
Non è proprio frame la pagina rimane uguale ma in una cella di una tabella ho messo

PHP:
if(isset($_GET['pag']))
{
	include $_GET['pag'].".php";	
}
else
{
        include "home.php";
}

e non mi dava nessun problema!
 

FCW

Nuovo Utente
13 Lug 2010
2
0
0
Ciao a tutti, io mi trovo alle prese con una situazione molto simile che in parte ho risolto.

Lo script di partenza è il seguente:

PHP:
function output($file)
{
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/zip");
header('Content-Disposition: attachment; filename='.$file);
header("Content-Transfer-Encoding: binary");
$out = $this->file();
header('Content-Length: '.strlen($out));
		
echo($out);
exit();
}

La funzione fa parte di una classe che genera dinamicamente il file zip come stringa binaria e lo passa al browser senza salvarlo sul server.

Nel mio caso l'archivio risultava corrotto con tutte le versioni di IE ma è ok con gli altri browser.
Sono riuscito a risolvere sostituendo la riga:

PHP:
header("Content-Type: application/zip");

con

PHP:
header("Content-Type: multipart/x-zip");

Spero (visto che invece il tuo problema sembra presentarsi un po' ovunque) che possa essere utile.

L'unica cosa che cmq non funziona è che qualunque browser sembra ignorare completamente le informazioni sulle dimensioni del file e riporta "dimensione sconosciuta".

Qualche idea in proposito?

Ciao e Grazie!
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Forse utilizzare strlen non è un'ottima idea, anche perché quella funzione restituisce la lunghezza della stringa, non la grandezza di un file in byte. Prova ad utilizzare filesize al suo posto.

Comunque se volete risolvere ogni problema basterebbe salvare in un file temporaneo i dati da scaricare e poi effettuare un redirect del browser. In questo modo tutti gli header saranno sicuramente corretti.

P.S. Se ve lo state chiedendo no, non soffro di insonnia, ma oggi mi sento mattutino :D
 

FCW

Nuovo Utente
13 Lug 2010
2
0
0
In realtà anche a me sembrava strano l'utilizzo di strlen, ma l'ho testata e restituisce la dimensione esatta del file.

Considera che nel mio caso il file da scaricare non esiste (è proprio una stringa) e oltretutto filesize prende come argomento un percorso e non un contenuto.

La soluzione che prospetti potrebbe andare, ma vorrei evitarla e soprattutto sono curioso di sapere dove sta l'inghippo.

Cmq grazie
 

ieldna

Nuovo Utente
26 Giu 2010
19
0
0
Genova
Guardate io ho risolto linkando il download di un file a downloadManager.php che ha questo codice, funziona con tutti i browser senza problemi, legge la dimensione del file e tutto.

Pagina del download:

HTML:
<html>
<body>
<a href="downloadManager.php?name=file_da_scaricare">Clicca qua per scaricare</a>
</body>
</html>

Download Manager

PHP:
<?php
$referrer = $_SERVER['HTTP_REFERER'];
if(isset($_GET['type']) && isset($_GET['name']))
{
	$nome = $_GET['name'].".zip";
	$url = "files/".$nome;
	$dimensioni = filesize($url);
	header ("Pragma: public");
	header ("Expires: 0");
	header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
	header ("Cache-Control: private", false);
	header ("Content-Type: application/force-download");
	header ("Content-Disposition: attachment; filename=\"" . $nome . "\";");
	header ("Content-Description: File Transfer");
	header ("Content-Transfer-Encoding: binary");
	header ("Content-Length: $dimensioni");
	set_time_limit (0);
	@readfile ($url);
}
?>
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Io però se fossi in te starei attento. Basterebbe inserire un URL come downloadManager.php?file=../file_riservato per scaricare un file zippato fuori dalla directory files. Per ovviare puoi usare la funzione realpath per controllare la reale directory da cui il file deve essere scaricato. Se non è files blocchi tutto. Prima, ovviamente, dovrai cambiare la directory di esecuzione dello script con chdir, impostandola al percorso in cui si trova il file downloadManager.php.
 
Discussioni simili
Autore Titolo Forum Risposte Data
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
gandalf1959 problema con header in area riservata PHP 4
X Problema con header() include() e i siti di hosting PHP 1
L problema con la funzione header!!! AIUTO! PHP 24
P problema con header(Location....) PHP 11
G html problema table scrollable con header fisso HTML e CSS 2
H problema tabella con header e prima colonna fissi Javascript 1
T Problema con header:"troppi reindirezzamenti" PHP 3
A Re_ problema con HEADER PHP 2
A Problema header con dreamweaver cs3 e PHP PHP 6
A Problema con autenticazione e header() PHP 0
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 1
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
T problema con select dinamica con jquery Javascript 0
S Problema con spazi bianchi HTML e CSS 5
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
Tommy03 Problema con z-index HTML e CSS 3
M Problema inserimento parole con apostrofo nel db PHP 5
C Problema con dati meteo xml XML 1
S Problema con infrarossi videocamera IP Cam e Videosorveglianza 1
V Problema con librerie allegro5 c++ C/C++ 1
M Problema con php per calcolo costo percentuale PHP 7
S Problema con mysqli_num_rows PHP 18
grgfede Problema javascript con aruba Javascript 1
M Problema con visibility e radio button Javascript 2
Marti1! Problema con casella mail cancellata Posta Elettronica 3

Discussioni simili