Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    PHP/Apache:scaricamento fiele dal browser

    Salve a tutti,
    il download dei file dal sito realizzato su piattaforma apache+php+mysql lo gestisco con questo script PHP.
    Sull'ambiente di sviluppo funziona perfettamente, mentre in quello di produzione presenta problemi per file che superano i due MB (non scarica più di 1,9MB). Qualcuno può aiutarmi a trovare una soluzione? ll problema risiedere nella configurazione di Apache o riguarda PHP?, Grazie.

    Codice:
    header("Content-Description: File Transfer");
    header("Content-Type: ".$tipoFile);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$dimensione_file);
    header("Content-Disposition: attachment; filename=".$nome_file);
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Cache-Control: private");
    header("Pragma: public");
    ob_clean();
    flush();
    readfile($path);

  2. #2
    Ho fatto dei passi avanti (chiamamoli così), nel senso che ora mi scarica l'intero file e funziona benissimo per il file .pdf, mentre altri tipi di file (es. .zip, .doc, .xls) risultano illeggibili al termine del download.
    Dove sbaglio?

    Il codice:
    ------------------------------------------------------------------------------------
    header("Content-Description: File Transfer"); //descrizione testuale del contenuto del messaggio
    header("Content-Type: ".$tipoFile); //tipo di file
    header('Content-Type: application/octet-stream');

    header("Content-Transfer-Encoding: binary"); //modo di codifica dei dati accessorio a quello principale
    header("Content-Length: ".$dimensione_file); //dimensione del file
    header("Content-Disposition: attachment; filename=".$nome_file); //apro la finestra di dialogo per il salvataggio del file
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Cache-Control: private");
    header("Pragma: public");

    //ob_clean();
    //flush();
    //readfile($path);

    // Per i file di grandi dimensioni
    ini_set('max_execution_time', 600);
    $chunksize = 1.9* (1024 * 1024); //bytes per blocco
    if ($dimensione_file > $chunksize) {
    $handle = fopen($path, 'rb');
    $buffer = '';
    while (!feof($handle)) {
    $buffer = fread($handle, $chunksize);
    echo $buffer;
    //ob_flush();
    ob_clean();
    flush();
    }
    fclose($handle);
    } else {
    ob_clean();
    flush();
    readfile($path);
    }
    exit();

  3. #3
    Per me ci metti troppi header.

    Hai provato a rimuovere gli header "Content-Transfer-Encoding" ed ad usare un solo "Content-Type" anzichè due?

    Verifica anche che il "Content-Type" sia il corretto tipo di file (mime) e non di encoding, come mi pare tu stia usando ora...
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

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 © 2024 vBulletin Solutions, Inc. All rights reserved.