Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema Filesize File

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80

    Problema Filesize File

    Salve avevo postato ieri un problema circa il link a file su cartelle locali (questo sotto consiglio per evitare di caricare file direttamente sotto un database sql) ora io con PHP sono riuscito a fare praticamente tutto, mi collego al database dove in un campo varchar ho i miei link alle cartelle dei miei lavori, mi faccio la mia bella query, e ora viene il bello, io mi ricavo dalla query il link che passo alla funzione opendir di PHP, e questo funziona, gli chiedo di leggermi l'elenco dei file, e anche questo sembra funzionare, ora mi rimarrebbe da chiedergli la dimensione dei file, e il problema è qui, perche poi in echo restituisco non la stringa ma il link al file (e questo funziona) che punta alla solita pagina download.php, ora io non so perchè ma il file che scarico è solamente 300 byte invece di 300 KB, la stessa cosa avviene anche con immagini di 2 MB che ne scarica solo i soliti circa 200/300 byte, io impazzisco, e da ieri che ci lavoro. Vi posto tutti e due i codici.


    Pagina di ricerca
    <?php
    /* Connessione e selezione del database */
    $connessione = mysqli_connect("localhost", "root", "pippo", "pluto")
    or die("Connessione non riuscita");
    /* Esecuzione di una query SQL */
    $query = "SELECT * FROM gare WHERE 1=1";
    $risultato = mysqli_query($connessione,$query) or die("Query fallita");
    /* Stampa dei risultati in HTML */

    print "<table>\n";
    echo "<table border =\"1\" cellspacing=\"0\" >";

    while ($linea = mysqli_fetch_array($risultato, MYSQLI_ASSOC)) {
    extract ($linea);

    /*da qui inizio a chiedere di aprire la cartella e leggere il contenuto*/
    $dir= $LINK;
    $cartella = opendir($dir);
    #creiamo un ciclo che legga i contenuti e li metta nell'array
    while ($file = readdir($cartella)) {
    $file_array[] = $file;
    }
    $percorso = $LINK&$file;
    $dimensioni_file=filesize($percorso);
    #facciamo un ciclo foreach per prendere gli elementi
    foreach ($file_array as $file){
    #tutti tranne quelli che iniziano per "." o per ".."
    if ( $file == ".." || $file == "." || $file == 'pdf' || $file == 'jpg');
    continue;

    }


    /*ora riparte il codice iniziale che mi restituisce il risultato e il link al file*/


    echo " <td>$ID_GARE</td>";
    echo " <td>$NOME</td>";
    echo " <td>$SCADENZA</td>";
    echo " <td>$REFERENTE</td>";
    echo " <td>$CATEGORIA</td>";
    echo " <td>$PARTNER</td>";
    echo " <td>$ESITO</td>";
    echo " <td>$NOTE</td>";
    echo "<td><a href=\"download.php?nome_file=$file&dimensioni_fil e=$dimensioni_file\">$file</a>
    ";
    echo " <td>$ARCHIVIO_CARTACEO</td>";
    echo " <td>$STATO</td></tr>";

    }
    echo "</table>";
    ?>


    Questo è donwload.php

    <?php
    $nome_file=$_GET['nome_file'];
    header("Content-type: Application/octet-stream");
    header('Content-Transfer-Encoding: binary');
    header("Content-Disposition: attachment; filename=$nome_file");
    header("Content-Description: Download PHP");
    $fileSize = @filesize ($file);
    if ($fileSize)
    header('Content-Length: ' . $fileSize, true);
    readfile($nome_file);
    ?>


    AIUUUUTOOOOOOOOO

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Ragazzi vi prego aiuto, so che sono a un passo dalla vittoria ma ho bisogno che qualcuno mi spieghi perchè mai mi scarica solo 300 byte

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    59
    Ciao,
    io ho praticamente il tuo stesso errore,solo che a me invece di 2,18 Mb(la dimensione del mio file) mi scarica circa 2,13.
    Se non imposto la funzione filesize funziona, ma è brutto perchè non vedo il progresso del download.
    Non ho trovato niente che mi aiutasse:tu sei riuscito a venirne fuori?
    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Ciao io ti posto il mio codice

    Ovviamente dato che sono un neofita è sicuramente possibile che il codice sia pieno zeppo di errori o peggio davvero poco chiaro, perciò approfitto con il ringraziare chi gli darà un'occhio e apportera le necessarie correzioni.

    Codice PHP:
    <?php
    $name
    =$_GET['nome_file'];
    $link=$_GET['link'];




    function 
    output_file($file$name$mime_type='')
    {
    /*
    This function takes a path to a file to output ($file),
    the filename that the browser will see ($name) and
    the MIME type of the file ($mime_type, optional).

    If you want to do something on download abort/finish,
    register_shutdown_function('function_name');
    */
    if(!is_readable($file)) die('File not found or inaccessible!');

    $size filesize($file);
    $name rawurldecode($name);

    /* Figure out the MIME type (if not specified) */
    $known_mime_types=array(
        
    "pdf" => "application/pdf",
        
    "txt" => "text/plain",
        
    "html" => "text/html",
        
    "htm" => "text/html",
        
    "exe" => "application/octet-stream",
        
    "zip" => "application/zip",
        
    "doc" => "application/msword",
        
    "xls" => "application/vnd.ms-excel",
        
    "ppt" => "application/vnd.ms-powerpoint",
        
    "gif" => "image/gif",
        
    "png" => "image/png",
        
    "jpeg"=> "image/jpg",
        
    "jpg" =>  "image/jpg",
        
    "php" => "text/plain"
    );

    if(
    $mime_type==''){
         
    $file_extension strtolower(substr(strrchr($file,"."),1));
         if(
    array_key_exists($file_extension$known_mime_types)){
            
    $mime_type=$known_mime_types[$file_extension];
         } else {
            
    $mime_type="application/force-download";
         };
    };

    @
    ob_end_clean(); //turn off output buffering to decrease cpu usage

    // required for IE, otherwise Content-Disposition may be ignored
    if(ini_get('zlib.output_compression'))
      
    ini_set('zlib.output_compression''Off');

    header('Content-Type: ' $mime_type);
    header('Content-Disposition: attachment; filename="'.$name.'"');
    header("Content-Transfer-Encoding: binary");
    header('Accept-Ranges: bytes');

    /* The three lines below basically make the
        download non-cacheable */
    header("Cache-control: private");
    header('Pragma: private');
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

    // multipart-download and download resuming support
    if(isset($_SERVER['HTTP_RANGE']))
    {
        list(
    $a$range) = explode("=",$_SERVER['HTTP_RANGE'],2);
        list(
    $range) = explode(",",$range,2);
        list(
    $range$range_end) = explode("-"$range);
        
    $range=intval($range);
        if(!
    $range_end) {
            
    $range_end=$size-1;
        } else {
            
    $range_end=intval($range_end);
        }

        
    $new_length $range_end-$range+1;
        
    header("HTTP/1.1 206 Partial Content");
        
    header("Content-Length: $new_length");
        
    header("Content-Range: bytes $range-$range_end/$size");
    } else {
        
    $new_length=$size;
        
    header("Content-Length: ".$size);
    }

    /* output the file itself */
    $chunksize 1*(1024*1024); //you may want to change this
    $bytes_send 0;
    if (
    $file fopen($file'r'))
    {
        if(isset(
    $_SERVER['HTTP_RANGE']))
        
    fseek($file$range);

        while(!
    feof($file) &&
            (!
    connection_aborted()) &&
            (
    $bytes_send<$new_length)
              )
        {
            
    $buffer fread($file$chunksize);
            print(
    $buffer); //echo($buffer); // is also possible
            
    flush();
            
    $bytes_send += strlen($buffer);
        }
    fclose($file);
    } else die(
    'Error - can not open file.');

    die();
    }    

    set_time_limit(0);
    $link .= 'scheda.pdf';
    $file_path=$link;
    output_file($file_path$name'text/plain');
    ?>

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.