Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Download di file .PDF immagazzinati in campo BLOB di MySql

    Con le immagini vado bene: le metto dentro al databasee le tiro fuori visualizzandole.
    Coi .PDF, invece, non vado per niente. Vorrei, non visualizzarli, ma semplicemente fare il dawnload quando clicco un link apposito.
    DI seguito il codice che non mi funzia:
    <?
    session_start();
    require_once('RAF_Page.php');
    require_once('RAF_Grafica.php');
    require_once('RAF_Objects.php');
    require_once('RAF_Site.php');
    $page = new RAF_Site();
    if(!isset($_REQUEST)) $_REQUEST = $HTTP_GET_VARS;
    if($_REQUEST["action"] && $_REQUEST["Id"] && is_numeric($_REQUEST["Id"]))
    {
    $query = "SELECT PDF FROM oggetti WHERE Id =".$_REQUEST["Id"];
    $select = $page->DB_Open($query);
    $result = @mysql_fetch_array($select);
    $data = $result["PDF"];
    $len = len($data);
    if(ereg("MSIE ([0-9].[0-9]{1,2})", $_SERVER["HTTP_USER_AGENT"]))
    {
    //MICROSOFT IEXPLORER
    header("Content-type: application/octet-stream");
    header("Content-Length: $len");
    header("Content-disposition: inline; filename=scheda.pdf");
    header("Expires: 0");
    header("Cache-control: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: public");
    } else {
    //MOZILLA FIREFOX
    header("Content-type: application/octetstream");
    header("Content-Length: $len");
    header("Content-Disposition: attachment; filename=scheda.pdf");
    header("Expires: 0");
    header("Pragma: no-cache");
    }
    echo $data;
    $page->DB_Close();
    }
    ?>

    Ho notato che in questo modo si và a cercare un file di nome "/tmp/scheda.pdf", che è il nome del file che vorrei avesse dopo l'estrazione da database.
    Devo usare le librerie per i PDF anche se non lo apro ?
    Non c'è modo di evitarlo ?
    Grazie mille

  2. #2
    Non utilizzare lo short open tag, utilizza il tag di apertura completo.
    Non utilizzare $_REQUEST, utilizza l'array superglobale specifico.
    Non eseguire query a partira da dati forniti dall'utente senza applicarci le necessarie funzioni di sicurezza (es. http://www.php.net/mysql_real_escape_string).
    Controlla il valore restituito dalle funzioni prima di accedere ai risultati (es. come fai con mysql_fetch_array()).
    Applica stripslashes() al risultato a seconda di get_magic_quotes_gpc().

    Ho notato che in questo modo si và a cercare un file di nome "/tmp/scheda.pdf", che è il nome del file che vorrei avesse dopo l'estrazione da database.
    Chi "và a cercare un file di nome "/tmp/scheda.pdf""?

  3. #3
    Sì, le sicurezze...dopo. Questo è uno script prototipo.
    Vado con il detto : "prima facciamo un codice che funzioni e poi facciamolo bene".
    Comunque i consigli sono sempre bene accetti. E ci mancherebbe, sono qui per questo.
    Il file /tnp/scheda.pdf me lo cerca l'applicazione KPDF quelle volte che Firefox si attiva per il download (...a raglio, cioè, non sò perchè a volte sì e a volte no).
    Non riesco a isolare il baco.
    Mi viene da pensare alle librerie .PDF (mancanti, nel mio sistema) o agli header().
    Se sposto gli header sopra, allora si attiva Firefox per il download, però cerca di scaricarmi lo script download.php che contiene il codice (a parte il fatto che non posso più mettere la len() negli header()).

    Grazie mille

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Le librerie pdf direi che non c'entrano una fava.
    Sugli header non ho capito cosa hai detto, ma secondo me i Content-type sono invertiti

  5. #5
    Originariamente inviato da luca200
    Le librerie pdf direi che non c'entrano una fava.
    Sugli header non ho capito cosa hai detto, ma secondo me i Content-type sono invertiti
    Ho rimescolato i content -type: nulla;
    Header: se comincio da qui:if(ereg("MSIE ([0-9].[0-9]{1,2})", $_SERVER["HTTP_USER_AGENT"])), dopo aver aperto la sessione e il resto lo metto dopo, qualcosa si muove.
    Allora: se lascio gli header li dove sono,ma tolgo quelli relativi alla $len e alla funzione che me la dà, il file viene giù direttamente a video, peccato però che me lo visualizzi in geroglifici.

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.