Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di ric.cpp
    Registrato dal
    Sep 2004
    Messaggi
    171

    [PHP] download - file pdf corrotti

    Ciao

    eseguendo il download con questo script... copiato da php.net i file pdf scaricati non vengono aperti perchè corrotti (errore 107)
    come mai?

    grazie

    Codice PHP:
        if (!is_file($file)) { die("[b]404 File not found![/b]"); }

       
    //Gather relevent info about file
       
    $len filesize($file);
       
    $filename basename($file);
       
    $file_extension strtolower(substr(strrchr($filename,"."),1));

       
    //This will set the Content-Type to the appropriate setting for the file
       
    switch( $file_extension ) {
             case 
    "pdf"$ctype="application/pdf"; break;
         case 
    "exe"$ctype="application/octet-stream"; break;
         case 
    "zip"$ctype="application/zip"; break;
         case 
    "doc"$ctype="application/msword"; break;
         case 
    "xls"$ctype="application/vnd.ms-excel"; break;
         case 
    "ppt"$ctype="application/vnd.ms-powerpoint"; break;
         case 
    "gif"$ctype="image/gif"; break;
         case 
    "png"$ctype="image/png"; break;
         case 
    "jpeg":
         case 
    "jpg"$ctype="image/jpg"; break;
         case 
    "mp3"$ctype="audio/mpeg"; break;
         case 
    "wav"$ctype="audio/x-wav"; break;
         case 
    "mpeg":
         case 
    "mpg":
         case 
    "mpe"$ctype="video/mpeg"; break;
         case 
    "mov"$ctype="video/quicktime"; break;
         case 
    "avi"$ctype="video/x-msvideo"; break;

         
    //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
         
    case "php":
         case 
    "htm":
         case 
    "html":
         case 
    "txt": die("[b]Cannot be used for "$file_extension ." files![/b]"); break;

         default: 
    $ctype="application/force-download";
       }

       
    //Begin writing headers
       
    header("Pragma: public");
       
    header("Expires: 0");
       
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
       
    header("Cache-Control: public"); 
       
    header("Content-Description: File Transfer");
       
       
    //Use the switch-generated Content-Type
       
    header("Content-Type: $ctype");

       
    //Force the download
       
    $header="Content-Disposition: attachment; filename=".$filename.";";
       
    header($header );
       
    header("Content-Transfer-Encoding: binary");
       
    header("Content-Length: ".$len);
       
    readfile($file); 

  2. #2
    Utente di HTML.it L'avatar di dalang
    Registrato dal
    May 2003
    Messaggi
    252
    prova a mettere ob_end_clean() prima di inviare gli headers:

    Codice PHP:
    ...
         case 
    "txt": die("[b]Cannot be used for "$file_extension ." files![/b]"); break;

         default: 
    $ctype="application/force-download";
       }

       
    //Svuoto il buffer
       
    ob_end_clean();

       
    //Begin writing header
       
    header("Pragma: public");
       
    header("Expires: 0");
       
    header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
    ... 

  3. #3
    Utente di HTML.it L'avatar di ric.cpp
    Registrato dal
    Sep 2004
    Messaggi
    171
    funziona... grazie

    mi spiegheresti più precisamente il motivo?

  4. #4
    Utente di HTML.it L'avatar di dalang
    Registrato dal
    May 2003
    Messaggi
    252
    praticamente, quando carichi la pagina, nel buffer del browser ci vengono messi gli header per la pagina html...
    quindi se non svuoti il buffer prima di mandare i nuovi headers, il file che scarichi avrà prima gli header html, e poi il contenuto del file.

    Per vedere cosa succede scarica il file senza ob_end_clean, ed aprilo con notepad o con un altro semplice editor di testo, e vedrai che il file, invece di iniziare con pdfqualcosa inizierà con una parte di html...

  5. #5
    Utente di HTML.it L'avatar di ric.cpp
    Registrato dal
    Sep 2004
    Messaggi
    171
    ti ringrazio per i chiarimenti

    ciao

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.