Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629

    Scaricare file dal server

    Ciao a tutti nel mio sito creo tramite una funzione php un file .zip che viene salvato nel server...vorrei poter dare la possibilità agli utenti di scaricare tale file, che funzione dovrei utilizzare, se esiste?Ho già provato con l'header ma al momento di aprire il file dopo averlo scaricato, zip dice che l'archivio è corrotto e non riesce ad aprirlo, mentre riesco ad aprire benissimo quello che scarico da amministratore io dal server.
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, se puo tornarti utlile io ho usato questo per un sito.
    codice:
    <?php
    // place this code inside a php file and call it f.e. "download.php"
    $path = "dload/"; //cartella dove sta il  file da scaricare
    $name='Parto_Per_La_Luna.mp3';
    $fullPath = $path.$name;
     
    if ($fd = fopen ($fullPath, "r")) {
        $fsize = filesize($fullPath);
        $path_parts = pathinfo($fullPath);
        $ext = strtolower($path_parts["extension"]);
        switch ($ext) {
            case "mp3":
            header("Content-type: application/mp3"); // add here more headers for diff. extensions
            header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
            break;
            default;
            header("Content-type: application/octet-stream");
            header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
        }
        header("Content-length: $fsize");
        header("Cache-control: private"); //use this to open files directly
        while(!feof($fd)) {
            $buffer = fread($fd, 2048);
            echo $buffer;
        }
    }
    fclose ($fd);
    ?>
    Chiamando lo script da url su click da link come ho fatto parte direttamente il dload (apri/salva)

    Non ho provato per .zip

  3. #3
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    ciao, grazie mille per la risposta...si spero vada bene, cambio qualcosa e provo subito

  4. #4
    Ciao jcsnake e ciao a tutti voi...
    jcsnake hai spiegato benissimo quanto succede a me, ma purtroppo non riesco a porvi rimedio.

    Ho provato ad utilizzare 1000 funzioni php di download trovate in rete per scaricare in locale un FILE.ZIP che ho su server perfettamente funzionante, ma che non appena scarico, MI RISULTA INUTILIZZABILE.

    jcsnake sei riuscito a risolvere la problematica? Qualcuno è in grado di aiutarmi?

    In rete sembrerebbe che qualcuno accusi pure apache che in qualche modo interagisca con il download corrompendo l'archivio. Sinceramente dato che ho cambiato mille funzioni di download e il problema persiste indipendentemente dal browser che utilizzi, inizio a pensare che apache possa in qualche modo esser la causa, ma davvero non so più dove sbattere la testa

    Vi prego ...aiutatemi!!!
    Grazie infinite...

    PS il problema l'ho in locale dove uso wamp server 2.1
    e publicando le pagine su server linux hostato su aruba...

  5. #5
    Se non ha più risposto molto probabilmente ha risolto con il codice postato da m4rko80. Provalo e se non funziona scrivi pure.

  6. #6
    Ciao Longo8,
    grazie per la rapida risposta...
    ascolta, io ho riadattato lo stesso codice proposto alle mie esigenze (praticamente l'ho trasformato in funzione a cui passo 2 parametri, il percorso e il nome del file)


    function scarica($percorso,$filename)
    {
    // place this code inside a php file and call it f.e. "download.php"
    $path = $percorso."/"; //cartella dove sta il file da scaricare
    $name=$filename;
    $fullPath = $path.$name;

    if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
    case "zip":
    header("Content-type: application/zip"); // add here more headers for diff. extensions
    header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
    break;
    default;
    header("Content-type: application/octet-stream");
    header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    }
    header("Content-length: $fsize");
    header("Cache-control: private"); //use this to open files directly
    while(!feof($fd)) {
    $buffer = fread($fd, 2048);
    echo $buffer;
    }
    }
    fclose ($fd);
    }


    infatti la chiamo con

    ......
    $where = "../../xml/".$_SESSION['id_utente'];

    $nome_file_archivio = 'archivio.zip';

    $percorso_zip = $where. '/'. $nome_file_archivio ;
    .....


    .....
    scarica($where,$nome_file_archivio);

    Con essa mi vien fatto scaricare il file archivio.zip , la dimensione è pure uguale a quella dello zip che trovo su server, solo che quello nel server, lo posso aprire senza problemi, quello che scarico invece mi risulta danneggiato e quindi inutilizzabile...

  7. #7
    Ciao ragazzi,
    ci sto impazzendo da tutta la giornata... e da ieri compreso...

    qui ho trovato la funzione che sembrerebbe risolvermi il problema, la posto nel caso possa essere d'aiuto ad altri.

    In locale con WampServer Version 2.1 e php versione 5.3.5 vi garantisco che a me funziona...

    Non vorrei sparare castronerie, ma visto che il file .zip lo genero io in una cartella, sembra che la differenza da ciò che facevo prima sia l'if...come se prima tentasse di scaricarlo quando ancora non era pronto al download...ma questa spiegazione chiaramente prendetela con le pinze visto che è da due giorni che sto facendomi "sanguinare" le meningi (anche se tra tutte le righe, che ho aggiunto una ad una al mio codice, solo quando ho fatto il controllo sull'esistenza del file, tutto si è sistemato...boh)

    Ad ogni modo ora su server in hosting sto avendo ancora problemi, perchè:

    1) inizialmente cercavo di inserire il file in una cartella che creavo in questo modo

    Mkdir($folder, 777,true);

    per poi capire che la sintassi corretta era

    Mkdir($folder, 0777,true);

    2)sul più bello, quando tutto sembrava funzionare, mi è comparso questo errore
    " Fatal error: Class 'ZipArchive' not found in /home/..."
    quindi al momento ho contattato il gestore per chiedere che mi renda disponibile la classe...

    Mamma mia sto svenendo..ma con tutti i lavori che potevo scegliere... proprio in questo mi ci sono ficcato?!

    Vi terrò aggiornato sulle evoluzioni...nel caso possa servire a qualcun altro...

    Buona serata a tutti...

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.