Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178

    scaricare file impedendone l'apertura nel browser

    apro una nuova discussione sperando di ottenere più facilmente delle risposte in merito

    nella discussione precedente ho cercato di ottenere consigli su come far funzionare correttamente il seguente codice php, che riesce si a far aprire nel browser la finestra di download riconoscendo il tipo di file ma non ne vede la dimensione, rendendo quindi ignoto il tempo di download all'utente :

    codice:
    <?    
        $filename = $_GET["filename"];
        $buffer = file_get_contents($filename);
    	
    	array (
    
      // archives
      'zip' => 'application/zip',
    
      // documents
      'pdf' => 'application/pdf',
      'doc' => 'application/msword',
      'xls' => 'application/vnd.ms-excel',
      'ppt' => 'application/vnd.ms-powerpoint',
      
      // executables
      'exe' => 'application/octet-stream',
    
      // images
      'gif' => 'image/gif',
      'png' => 'image/png',
      'jpg' => 'image/jpeg',
      'jpeg' => 'image/jpeg',
    
      // audio
      'mp3' => 'audio/mpeg',
      'wav' => 'audio/x-wav',
    
      // video
      'wmv' => 'video/wmv',
      'mpeg' => 'video/mpeg',
      'mpg' => 'video/mpeg',
      'mpe' => 'video/mpeg',
      'mov' => 'video/quicktime',
      'avi' => 'video/x-msvideo'
    );
    
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
        header("Content-Type: application/force-download");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: " . strlen($buffer));
        header("Content-Disposition: attachment; filename=$filename");
    
        echo $buffer; 
    ?>
    ho provato le soluzioni suggerite da djhell e daniele_dll ma la dimensione del file e tempo di download continuano a rimanere nascoste, inoltre nell'ultimo caso rimuovendo l'array di MIME il file quick time risulta di formato sconosciuto e non ne viene visualizzata l'applicazzione di riferimento, a questo punto mi viene da pensare che il problema della dimensione possa essere del server...

    eppure eseguendo questa stringhetta al posto del codice di download la dimensione del file è mostrata correttamente nel browser:
    codice:
    <?php
     $filename = $_GET["filename"];
     
     
     echo filesize($filename);
    
    ?>
    dov'è l'arcano errore? attendo consigli
    è troppo impegnativo...

  2. #2
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178

    help

    nessuno può aiutarmi?
    è troppo impegnativo...

  3. #3
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178

    ...

    ho trovato anche questo codice al seguente indirizzo : http://e-book-on-line.blogspot.com/

    codice:
    <?php
    
    $filename = $_GET['file'];
    
    // required for IE, otherwise Content-disposition is ignored
    if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');
    
    // addition by Jorg Weske
    $file_extension = strtolower(substr(strrchr($filename,"."),1));
    
    if( $filename == "" )
    {
    echo "ERROR: download file NOT SPECIFIED. USE force-download.php?file=filepath";
    exit;
    } elseif ( ! file_exists( $filename ) )
    {
    echo "ERROR: File not found. USE force-download.php?file=filepath";
    exit;
    };
    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;
    default: $ctype="application/force-download";
    }
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");
    // change, added quotes to allow spaces in filenames, by Rajkumar Singh
    header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($filename));
    readfile("$filename");
    exit();
    ?>
    si comporta esattamente come quello riportato nel primo post, ovvero scarica e mantiene nome/estensione file ma il browser non ne vede la dimensione è dà per ignoto il tempo rimanente al termine del download...

    dubito che nessuno abbia mai avuto necessita di scaricare direttamente un file senza che questo venisse aperto nel browser e che nessuno, in tutta internet, abbia mai trovato una soluzione per questo problema, ci sarà pure un motivo se con questi due codici il browser non vede la dimensione...o no?
    è troppo impegnativo...

  4. #4
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178

    up... :(

    up...
    è troppo impegnativo...

  5. #5
    se per assurdo metti:

    header("Content-Length: 100000");

    Che succede?

    vedi se riesci a trovare un altro host, gratuito, su cui provare lo script... Magari è il tuo server che fà il monazzo...
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  6. #6
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178
    le prove le stavo facendo su un host gratuito, quello di altervista, mi hanno appena attivato dominio+host condiviso linux su hosting lab, ho provato di nuovo lo scrip(che reincollo):

    codice:
    <?    
        $filename = $_GET["filename"];
        $buffer = file_get_contents($filename);
    	
    	array (
    
      // archives
      'zip' => 'application/zip',
    
      // documents
      'pdf' => 'application/pdf',
      'doc' => 'application/msword',
      'xls' => 'application/vnd.ms-excel',
      'ppt' => 'application/vnd.ms-powerpoint',
      
      // executables
      'exe' => 'application/octet-stream',
    
      // images
      'gif' => 'image/gif',
      'png' => 'image/png',
      'jpg' => 'image/jpeg',
      'jpeg' => 'image/jpeg',
    
      // audio
      'mp3' => 'audio/mpeg',
      'wav' => 'audio/x-wav',
    
      // video
      'wmv' => 'video/wmv',
      'mpeg' => 'video/mpeg',
      'mpg' => 'video/mpeg',
      'mpe' => 'video/mpeg',
      'mov' => 'video/quicktime',
      'avi' => 'video/x-msvideo'
    );
    
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
        header("Content-Type: application/force-download");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: " . strlen($buffer));
        header("Content-Disposition: attachment; filename=$filename");
    
        echo $buffer; 
    ?>

    e funziona! dimensione, tempo rimanente, tutto! EVVIVA!!!

    MA, prima di chiudere la faccenda resta un ultimo dettaglio : firefox, continua a dire per ciascun file che si tratta di un WMV pur visualizzando correttamente l'icona del programma cui fà riferimento il file nel caso lo si volesse aprire invece di salvare, opera e explorer visualizzano correttamente il tipo(documento word, filmato quictime etc), come faccio a specificare correttamente i mime dell'array in modo che firefox non si inventi il tipo del file?

    grazie mille...
    è troppo impegnativo...

  7. #7
    beh, questa riga è sbagliata:

    header("Content-Type: application/force-download");


    Devi mettere quello che corrisponde al tuo file...

    Ti estrai l'estensione con un substr aiutandoti a trovare la posizione del punto con strrpos (notare la r per reverse)
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  8. #8
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178
    stando al manuale di php si tratta di questo... http://it2.php.net/substr

    e stando all'utlimo commento che dice :
    ***Caution newbie***
    To extract a file Extension this fuction could be useful.

    $file_extension = substr($filename , strrpos($filename , '. ') +1);

    Suppose your file name is Baldaris.jpeg

    strrpos will return the last dot position in the string 9 so

    so the compiler will execute substr($filename , 10)

    $file_extension will have value jpeg

    pretty cool...

    Cheer's

    Baldaris

    se non ho capito male, utilizzerei questa funzione per richiamare la variabile $filename consentendogli di analizzare il nome del file(dato che l'indirizzo è una cosa tipo ../downloads/download.php?filename=Documento.doc si tratta di tutto ciò che trova dopo l'uguale)

    specificando un valore numerico per l'inizio e la fine(se non specificato coincide con 0 quindi il primo carattere che incontra) gli dico "quanto tagliare" della stringa che trova...dato che mi interessa l'estensione del file(le ultime tre lettere) possono non specificare il valore finale(altrimenti invece di 'wmv' avrei 'wm' con 1 o 'w' con 2)...ma il problema è quanto tagliare dall'inizio, i nomi dei file non hanno tutti la stessa lunghezza, quindi non funzionerebbe per tutti...o sbaglio? :master:
    è troppo impegnativo...

  9. #9
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178
    aspè, mi rispondo da solo

    codice:
    $file_extension = substr($filename , strrpos($filename , '. ') +1);
    la strrpos che viene subito dopo substr serve per dirgli di considerare la stringa partendo dal punto ('. '), e il +1 sarebbe il valore di partenza che gli dice di escludere il punto, prendendo tutto quello che c'è dopo, ovvero l'estensione del file...

    l'ho inserita e...funziona!!!! ora neanche firefox si inventa più la tipologia del file!!!

    ho messo l'header così :
    codice:
    header("Content-Type: $file_extension");

    il codice funzionante è quindi il seguente:
    codice:
    <?    
        $filename = $_GET["filename"];
        $buffer = file_get_contents($filename);
    	$file_extension = substr($filename , strrpos($filename , '. ') +1);
    	
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
        header("Content-Type: $file_extension");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: " . strlen($buffer));
        header("Content-Disposition: attachment; filename=$filename");
    
        echo $buffer; 
    ?>

    finalmente ho risolto anche questa...grazie mille dell'aiuto, da solo non ci sarei mai arrivato!!
    è troppo impegnativo...

  10. #10
    aspè... anche così non è correttissimo...
    Te nei primi post hai messo questo array:

    array (

    // archives
    'zip' => 'application/zip',

    // documents
    'pdf' => 'application/pdf',
    'doc' => 'application/msword',
    'xls' => 'application/vnd.ms-excel',
    'ppt' => 'application/vnd.ms-powerpoint',

    // executables
    'exe' => 'application/octet-stream',

    // images
    'gif' => 'image/gif',
    'png' => 'image/png',
    'jpg' => 'image/jpeg',
    'jpeg' => 'image/jpeg',

    // audio
    'mp3' => 'audio/mpeg',
    'wav' => 'audio/x-wav',

    // video
    'wmv' => 'video/wmv',
    'mpeg' => 'video/mpeg',
    'mpg' => 'video/mpeg',
    'mpe' => 'video/mpeg',
    'mov' => 'video/quicktime',
    'avi' => 'video/x-msvideo'
    );


    Dovresti associarlo a qualcosa.. tipo così:


    $tipi_di_files = array...

    poi quando fai l'header, fai così:

    header("Content-Type: ".$tipi_di_files[$file_extension]);

    Così è corretto al 100%
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

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.