Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 24 su 24

Discussione: Download File Da Php

  1. #21
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Innanzitutto grazie per le risposte sia a Rasero che a Neo996sps, proverò subito lo script di Rasero, cercando prima di capirlo ovviamente, oggi è sabato ma non resisto fino a lunedì, PHP è diventata quasi una mania, io in realtà faccio tutt'altro nella vita, lavoro in uno studio di architettura, ma mi è venuto in mente di farmi un database per tenere sotto controllo tutto (lavori, concorsi, gare, ecc), e ora mi sta' prendendo la mano confesso. Per Neo... io in realtà ho dei file sul mio server, sotto un hard disk condiviso, quello che devo fare è una query sul database (che stà su un'altro hard disk c:/database) che mi restituisce il lavoro che cerco, tipo PIPPO, la query trova anche un campo che non viene mostrato a video - link - link è un varchar dove io mi copio (con phpmyadmin inserisco i dati per il momento, anche se ho iniziato a usare i form html, più user friendly per i miei colleghi) a mano il percorso del file tipo //server/archivio/lavori/pippo... a questo punto php recupera il valore di link, lo passa a readdir, ecc ecc, che verifica l'esistenza di un file a mio piacimento (tipo riassunto.pdf) e mi restituisce un echo con al posto del nome solamente il nome con relativo link. Fin qui tutto ok il problema sorgeva come ho scritto in fase di donwload in cui io riesco a scaricare soltanto 300 bytes invece della dimensione reale del file.

  2. #22
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Vi aggiungo qualche info in più. Per quanto concerne lo script di Rasero, il mio problema è come far riuscire a passare tutte le variabili necessarie per la funzione output, in particolare la variabile file. Inoltre vi aggiorno su alcune novità, ho scoperto che in realtà il mio script, che vi riposto funziona!!!!!!, o meglio funziona solamente sulla cartella c:/database, ossia se io metto li dentro uno stramaledetto file, la mia paginetta download me lo scarica, viceversa se lo metto sotto un'altra cartella tipo E:/archivio (che badate bene l'open dir di PHP apre e legge benissimo il contenuto) non lo scarica più e da quel famoso errore, ossia ne scarica solo 300 bytes. Qualcuno sa darmi maggiori info....

    script per ricerca e link a download.php


    <?php
    /* Connessione e selezione del database */
    $connessione = mysqli_connect("localhost", "root", "G91031", "database")
    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 */
    echo "<table border =\"1\" cellspacing=\"0\" >";
    while ($linea = mysqli_fetch_array($risultato, MYSQLI_ASSOC))
    {
    extract ($linea);
    If ($LINK!="")
    {
    $dir= $LINK;
    $cartella = opendir($dir);
    $list = "Scheda";
    $files = array();
    #creiamo un ciclo che legga i contenuti e li metta nell'array
    while($file_name = readdir($cartella))
    {
    if ((strpos($file_name, $list) !== false) && (strpos($file_name, $list) === 0))
    {
    if(($file_name != ".") && ($file_name != ".."))
    {
    $files[] = $file_name;
    }
    }
    }
    closedir($cartella);
    sort($files);
    reset($files);
    foreach($files as $file)
    {
    $dimensioni_file=filesize("$dir/". $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_fi le=$dimensioni_file\">$file</a>
    ";
    echo " <td>$ARCHIVIO_CARTACEO</td>";
    echo " <td>$STATO</td></tr>";
    }
    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>NO SCHEDA</td>";
    echo " <td>$ARCHIVIO_CARTACEO</td>";
    echo " <td>$STATO</td></tr>";

    }
    else
    {
    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>NON ARCHIVIATO</td>";
    echo " <td>$ARCHIVIO_CARTACEO</td>";
    echo " <td>$STATO</td></tr>";
    }

    }
    echo "</table>";
    ?>



    download.php


    <?php
    $nome_file=$_GET['nome_file'];
    $dimensione_file=$_GET['dimensioni_file'];

    header('Content-Description: File Transfer');
    header('Content-Type: ' . "application/force-download");
    header("Content-Disposition: attachment; filename=$nome_file");
    header("Content-Description: Download PHP");
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header("Content-Length: $dimensione_file");
    readfile($nome_file);
    ?>


    P:S:
    LO SO CHE FORSE IL MIO CODICE NON E' MOLTO ELEGANTE MA CON IL TEMPO SPERO DI RIUSCIRE A FARE MEGLIO....

    aiutatemiiiiiiii

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

    NUOVO AGGIORNAMETNO

    Allora io ho scoperto che in realtà il PHP open dir correttamente apre la cartella sul server E:/......., mentre quando io gli chiedo di scaricare il file succede che lui me lo va a cercare nella cartella locale (ossia sotto c:/database), ecco dunque l'arcano, come caspita faccio a mandarlo a scaricare in quella cartella così remota per lui, probabilmente la soluzione è quella di Rasero, rimane il problema di passargli tutte le variabili, dentro il mio

    echo "<td><a href=\"download.php?nome_file=$file&&dimensioni_fi le=$dimensioni_file\">$file</a>
    ";

    cosa devo aggiungere o modificare per passare tutte le variabili necessarie alla funzione output

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

    FINALMENTE CI SONO RIUSCITO

    Allora finalmente ci sono riuscito, grazie anche al consiglio di tutti, bè in realtà qualcuno mi aveva un pò spaventato dicendomi che con php non era possibile (o forse mi sono spiegato io male su cosa dovevo fare).

    Ad ogni buon conto vi sposto il codice funzionante, è da migliorare perchè secondo me fà istruzioni doppie e troppi cicli if, ma tant'è per il momento me lo faccio bastare.

    Spiegazione del codice:

    Il codice si connette a un database e esegue una query su una tabella, la tabella ha un campo nominato link (varchar), il campo viene passato a opendir () e a readdir(), PHP apre la cartella e verifica che al suo interno ci sia un file nel mio caso il file da cercare si chiama Scheda.pdf, (ovviamente può essere modificato sia il file che il nome, credo che in questo caso sia un problema di filemanager, che mi accingo a studiare). Successivamente php mi restituisce la tabella con il link al file nel caso il file esista e con una scritta 'NO SCHEDA' nel caso non trovi il file, inoltre avevo bisogno anche di un ulteriore controllo circa l'esistenza del campo link della tabella, ossia che il campo non sia vuoto, in questo caso se il campo è vuoto mi restituisce un'altra scritta 'NON ARCHIVIATO' nella tabella PHP. A questo punto io passo attraverso href non solo il nome e la dimensione ma anche il path del file, e grazie alla funzione di Rasero mi scarico il mio file.

    ecco la pagina di ricerca:
    <?php
    /* Connessione e selezione del database */
    $connessione = mysqli_connect("localhost", "root", "G91031", "database")
    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 */
    echo "<table border =\"1\" cellspacing=\"0\" >";
    while ($linea = mysqli_fetch_array($risultato, MYSQLI_ASSOC))
    {
    extract ($linea);
    If ($LINK!="")
    {
    $dir = $LINK;
    $cartella = opendir($dir);
    $list = "Scheda";
    $files = array();
    #creiamo un ciclo che legga i contenuti e li metta nell'array
    $LINK .= 'scheda.pdf';
    if (file_exists ($LINK))
    {
    while($file_name = readdir($cartella))
    {
    if ((strpos($file_name, $list) !== false) && (strpos($file_name, $list) === 0))
    {
    if(($file_name != ".") && ($file_name != ".."))
    {
    $files[] = $file_name;
    foreach($files as $file)
    {
    $dimensioni_file=filesize("$dir/". $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&&link=$dir\">$ file</a>
    ";
    echo " <td>$ARCHIVIO_CARTACEO</td>";
    echo " <td>$STATO</td></tr>";
    }
    }
    }
    } closedir($cartella);
    sort($files);
    reset($files); }
    else
    {
    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>NO SCHEDA</td>";
    echo " <td>$ARCHIVIO_CARTACEO</td>";
    echo " <td>$STATO</td></tr>";
    closedir($cartella);
    sort($files);
    reset($files);
    }

    }
    else
    { 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>NON ARCHIVIATO</td>";
    echo " <td>$ARCHIVIO_CARTACEO</td>";
    echo " <td>$STATO</td></tr>";
    }
    }

    echo "</table>";
    /* Liberazione delle risorse del risultato */
    mysqli_free_result($risultato);
    /* Chiusura della connessione */
    mysqli_close($connessione);
    ?>


    ed ecco la pagina download:
    <?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');
    ?>

    Per il momento la funzione output è dentro la pagina download, la prossima settimana mi creo un file output.php e lo includo nella pagina download, così per avere il codice più pulito.

    EVVVIIIIIIVVVVAAAA

    GRANDE PHP

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