Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    21

    Download file che non funziona su IE

    Salve a tutti,
    ho preparato uno script per "costringere" il browser a scaricare file invece di aprirli (pdf, jpg, doc, xls e compagnia bella). Funziona benissimo su Firefox, ma sia su IE6 che su IE7 il file non viene scaricato correttamente.
    Dal momento che lo script di per sè funziona, immagino sia un problema di compatibilità Firefox/IE, ma non ho individuato quale sia! Sapreste aiutarmi?

    Codice PHP:
    //
    // Legge il file
    $file_content implode(''file($request['file']));
    // Invia l'header del formato di file
    header("Content-Type: application/octet-stream");
    // Specifica al browser che il file ? un allegato, ovvero è da scaricare non da visualizzare
    header("Content-Disposition: attachment; filename={$nomefile}");
    // Specifica la lunghezza del file
    header("Content-Length: {".filesize($request)."}");
    // Specifica il tipo di codifica nel trasferimento
    header("Content-Transfer-Encoding: binary");
    // Invia il file al browser
    echo $file_content;
    exit(
    0); 
    Un grosso grazie in anticipo!

  2. #2
    Alcuni suggerimenti:

    - Non usare implode/file, utilizza file_get_contents() o fopen/fread etc.
    - La variabile $nomefile e' valorizzata correttamente?
    - Il "parametro" filename dell'header Content-Disposition dovrebbe essere racchiuso tra apici.
    - La variabile $request e' valorizzata correttamente?
    - Invece di leggere il file in memoria, perche' non utilizzi readfile()?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    21
    Grazie mille Filippo, ho risolto!

    Praticamente, a Explorer non piace che gli si dica la dimensione del file. E' bastato commentare la riga "Content_length"!
    Post il codice, magari servirà a qualcuno.

    Codice PHP:
    // Invia l'header del formato di file
    header("Content-Type: application/octet-stream");
    // Specifica al browser che il file è un allegato, ovvero è da scaricare non da visualizzare
    header("Content-Disposition: attachment; filename=".$nomefile.";");
    // Specifica il tipo di codifica nel trasferimento
    header("Content-Transfer-Encoding: binary");
    // Invia il file al browser
    readfile($request['file']);
    exit(
    0); 

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Non credo che sia una gran furbata... non indicare la lunghezza va contro le specifiche http, e ti espone ad errori.
    Piuttosto credo che potresti risolvere indicando ad IE (ma solo a IE) "octetstream" invece di "octet-stream" (cioè senza trattino)

    Detto questo.... php non c'entra nulla

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.