Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Download file con PHP

  1. #1

    Download file con PHP

    Ciao a tutti, vi spiego il mio problema...
    Sto facendo un sito dove si può effettuare l'upload e il download di file generici...
    L'upload tutto ok, salva i file e salvo i nomi in database...
    Il download lo effettua ma quando vado poi ad aprire i file mi dice che è impossibile aprire il file e che probabilmente i file non sono supportati o sono danneggiati...

    Qualcuno ha idea di cosa potrebbe essere??

    Vi scrivo qui la pagina del download:

    <html>
    <head>
    <title>Pagina Downloafdsfsdd</title>
    </head>
    <body>
    <?PHP
    $name=$_POST["opzione"];
    $url= "File/";
    $total=$url.$name;
    header("Pragma: no-cache");
    header("Expires: 0");
    Header("Content-Type: application/octet-stream");
    Header("Content-Length: ".filesize($total));
    Header("Content-Disposition: attachment; filename=$name");
    readfile($total);
    ?>
    </body>
    </html>

  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Stai facendo un controllo sul tipo di file caricato, vero? Altrimenti spalanchi un buco enorme nel tuo sito.
    Comunque stai sbagliando a inviare gli header: non puoi mandare nessun header dopo aver inviato un output., quindi devi togliere tutta la parte di html (che tra l'altro non ha alcun senso)
    Prova anche a verificare con quali permessi sono salvati i file.

  3. #3
    scusa l'ignoranza cosa intendi per controllo al tipo di file?... e come faccio a verificare i permessi dei file caricati?

  4. #4
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Il tipo di file: gif, jpg, png, doc, txt, ecc. ecc.
    Il problema è che se ti caricano un file php, possono accedere a tutte le info del tuo server.
    Per verificare i permessi dovresti aver accesso al server, mi rendo conto che in effetti non sempre è possibile

  5. #5
    Non mi interessano molto i permessi per ora... devo assolutamente riuscire a effettuare il download del file e ad aprirlo senza problemi entro domani...

    Il problema secondo me sta qui:
    Header("Content-Type: application/octet-stream");

    bisogna mettere il formato del file che vogliamo scaricare giusto?
    ho provato a scaricare un immagine jpeg mettendo questo header:
    header('Content-Type: image/jpeg');

    ma niente da fare non cambia, dice sempre che il file non è supportato o danneggiato...

    è dalle 6 di stamattina che cerca di uscirne!!

  6. #6
    Scusa forse non ho capito io ma....
    per il download non ti basta mettere un link al file che vuoi far scaricare...?????

    tipo...
    Scarica il file

  7. #7
    ma in questo modo apre il file con il browser... io invece voglio proprio salvarlo con la finestrina che dice "apri con" o "salva"...

    Una soluzione del genere la terrei proprio come ultimissima spiaggia!!

  8. #8
    Originariamente inviato da Primasso
    ma in questo modo apre il file con il browser... io invece voglio proprio salvarlo con la finestrina che dice "apri con" o "salva"...

    Una soluzione del genere la terrei proprio come ultimissima spiaggia!!
    ok Capito!!!
    Allora secondo me il problema è che tu non specifichi il tipo di file (MIME TYPE)

    diciamo che tu voi far scaricare il file "prova.txt" al tuo utente che gli appaia la dialog che dice "apri con" o "salva"
    e che all'utente venga proposto il salvataggio con un nuovo nome (non "prova.txt" ma "nomenuovo.txt").

    il codice è questo (l'ho testato e funge)
    deve essere messo prima di qualsiasi tag o altro....

    Codice PHP:
    <?PHP
    header
    ('Content-type: text/plain');

    // chiamo il download
    header('Content-Disposition: attachment; filename="nomenuovo.txt"');

    // leggo l'origine dei dati
    readfile('prova.txt');
    ?>

    il punto importate è "text/plain", nel senso che a seconda del file da scaricare devi specificare il tipo di file giusto (application/pdf, video/mp4, image/jpeg, audio/mp3, ecc.)

  9. #9
    Il problema era proprio trovare un modo per poter inserire i vari formati all'interno dell'header a seconda del file che sto scaricando...

    Ho trovato una soluzione girando e rigirando tutta internet... te la posto:

    <?PHP
    $nome=$_POST["opzione"];
    header("Content-Type: application; name=".$nome);
    header("Content-Transfer-Encoding: binary");
    //header("Content-Length: ".$dimensione_file);
    header("Content-Disposition: attachted; filename=".$nome);
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Cache-Control: private");
    header("Pragma: public");
    readfile($nome);
    ?>

    header("Content-Type: application; name=".$nome);
    tutto sta qui, non ho capito perchè le mie precedenti prove non abbiano funzionato, però sono contento di aver trovato comunque una soluzione... ringrazio entrambi per i consigli!!

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.