Visualizzazione risultati 1 fino 5 di 5

Discussione: Download con PHP di archivi .RAR caricati in db MYSQL

  1. #1
    fiduciali non è connesso Neofita
    Data registrazione
    05-07-2017
    Messaggi
    23

    Predefinito Download con PHP di archivi .RAR caricati in db MYSQL

    Salve a tutti, ho inserito in database un campo longblob contenente un archivio rar nome.rar.

    Ho creato un'apposita pagina che mi mostra la lista dei file presenti in database (sono tutti archivi rar), nel momento del download non viene mostrato nessun errore e non viene scaricato nulla.

    Mostro il codice non funzionante che uso:

    Codice PHP:
    //dopo la connessione al db e la selezione della riga del file che mi interessa
    $file = $row['file']; //il file binario
    $nome = $row['nome']; //il nome del file rar
    $nome_rar = $nome . ".rar"; //il nome del file e la sua estensione

    echo "Download del file " . $nome . " in corso...";

    //SE IL BROWSER È INTERNET EXPLORER
    if(ereg("MSIE ([0-9].[0-9]{1,2})", $_SERVER["HTTP_USER_AGENT"])) {
    header("Content-Type: application/rar");
    header("Content-Disposition: inline; filename=$nome_rar");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: public");
    } else {
    header("Content-Type: application/rar");
    header("Content-Disposition: attachment; filename=$nome_rar");
    header("Expires: 0");
    header("Pragma: no-cache");
    }
    Mi sapreste dire dove è l'errore e come risolvere?

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    In alto usa error_reporting(-1);
    Puoi provare in fondo la pagina echo $file; ?
    Echo deve obbligatoriamente essere presente dopo gli header.
    Ultima modifica di darbula : 26-04-2019 alle ore 12.56.29

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,167

    Predefinito

    Oltre ad effettuare l'echo del file (dopo gli header), ricorda che ogni volta utilizzi le funzioni header() devi accertarti di non aver inviato alcun output HTML/testo alla pagina, perché questo provocherebbe la chiusura dell'header e l'inizio del contenuto del body: non potrai quindi modificare alcun campo del'header perché è già stato inviato.

    Quindi rimuovi:
    Codice PHP:
    echo "Download del file " . $nome . " in corso...";
    , sia perché potrebbe provocare quanto detto sopra, sia perché danneggerebbe il file con caratteri in più non voluti nel file.

    Ciao!

  4. #4
    fiduciali non è connesso Neofita
    Data registrazione
    05-07-2017
    Messaggi
    23

    Predefinito

    Inanzi tutto grazie per la sua risposta

    Ho già provato con echo $file;
    viene stampata questa questa riga: Rar!Ïs —Õtà4èh’N05c769a2782ace3bð°#•Ä={@
    Questa stringa dovrebbe essere l'archivio .rar aperto come un file di testo e non come archivio

    Inserendo error_reporting(-1);
    viene mostrato:

    Codice HTML:
    Download del file NOME in corso...
    Deprecated: Function ereg() is deprecated in /membri/fiduciali/download.php on line 34
    
    Warning: Cannot modify header information - headers already sent by (output started at /membri/fiduciali/header.php:139) in /membri/fiduciali/download.php on line 41
    
    Warning: Cannot modify header information - headers already sent by (output started at /membri/fiduciali/header.php:139) in /membri/fiduciali/download.php on line 42
    
    Warning: Cannot modify header information - headers already sent by (output started at /membri/fiduciali/header.php:139) in /membri/fiduciali/download.php on line 43
    
    Warning: Cannot modify header information - headers already sent by (output started at /membri/fiduciali/header.php:139) in /membri/fiduciali/download.php on line 44
    
    Rar!Ïs —Õtà4èh’N05c769a2782ace3bð°#•Ä={@
    Notice: Undefined index: applicazione in /membri/fiduciali/download.php on line 62

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,167

    Predefinito

    Warning: Cannot modify header information - headers already sent by
    Esattamente quanto dicevo sopra.

    In generale evita qualsiasi output, anche l'avviso
    Deprecated: Function ereg() is deprecated
    sicuramente darà problemi sia al discorso precedente sia al fatto che quei caratteri andrebbero dentro il file, rendendolo inutilizzabile.
    eregi() come scritto dall'avviso è deprecato. Nella documentazione è indicata la nuova funzione che si dovrebbe utilizzare.

    Ciao!
    Ultima modifica di alemoppo : 26-04-2019 alle ore 16.48.06

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •