Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Mysql e campi blob

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    7

    Mysql e campi blob

    Salve,

    ho un problema assai strano.

    In una pagina di upload documenti, memorizzo allegati di diversi formati all'interno di un campo long blob.
    Quando provo a recuperarli quelli con il formato pdf non riesco a visualizzarli, Explorer lancia Acrobat ma il documento mi si presenta vuoto (con tutti gli altri formati [doc,txt,rtf,html] non da nessun problema!!!)
    Il codice e' il seguente:
    <?php

    $query = "select * from allegati where IDALLEGATO=$id";
    $result = @mysql_query($query);

    // Ho verificato ed il campo type contiene il corretto Content-Type anche per i pdf application/pdf

    $data = @mysql_result($result,0,"DATIFILE");
    $type = @mysql_result($result,0,"MIMEFILE");
    $size = @mysql_result($result,0,"SIZEFILE");
    $nome = @mysql_result($result,0,"NOMEFILE");


    header("Content-Type: " . $type);
    header("Pragma: public");
    header("Content-Dispositionnline; filename=".$nome);
    header('Content-Transfer-Encoding: Binary');
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Length: " . $size);
    echo $data;

    ?>

    Qualcuno di voi ha un'idea?

    Grazie

  2. #2
    Non visualizzare i pdf potrebbe anche essere un'impostazione del browser..
    da un sito qualunque riesci sempre a visualizzare un pdf nel browser o lo devi scaricare?
    ..povero silvio, lui è sceso in campo..
    e lo ha fatto per noi...comunisti...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    7
    No, purtroppo negli altri siti riesco a visualizzare i pdf.

  4. #4
    Salve a tutti.
    Io ho un problema simile.
    Anch'io memorizzo dei documenti PDF in un campo longblob di MySQL.
    Poi necessito di farli scaricare dagli utenti.
    Utilizzo questo codice per eseguire il lavoro

    Codice PHP:
        require("../connection_data.php");
        require_once(
    "../database/MySQL.php");
        
        
    $pdf_retriever = &new MySQL($host$user$password);
        
    $pdf_retriever->connectToDb($db);
        
    $searchfield mysql_real_escape_string($_GET['field']);
        
    $query "SELECT allegato" $searchfield ", oggetto FROM comunicazioni WHERE codice_comunicazione='" mysql_real_escape_string($_GET['id']) . "';";
        
    $result $pdf_retriever->query($query);
        if(
    $result->size() == 1){
                    
    // qui determino semplicemente il nome che avrà il file e prendo il contenuto dal campo blob che mi serve
            
    while($row $result->fetch()){
                
    $extension $_GET['field'] > "_extra" "";
                
    $file_name trim(strtolower(substr($row['oggetto'], 010))) . $extension;
                
    $pdf_content = (isset($_GET['field']) && ($_GET['field'] > 0)) ? $row['allegato2'] : $row['allegato'];
            }
            
                    
    // ho usato questa soluzione proposta in un tutorial di php.html.it poiché gli header che utilizzavo io sembravano non essere sufficienti, ma in realtà il risultato è lo stesso.
            
    if(ereg("MSIE ([0-9].[0-9]{1,2})"$_SERVER["HTTP_USER_AGENT"])){
                
    header("Content-Type: application/octetstream");
                
    header("Content-Disposition: inline; filename=\"" $file_name ".pdf\"");
                
    header("Expires: 0");
                
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                
    header("Pragma: public");
            }else{
                
    header("Content-Type: application/octet-stream");
                
    header("Content-Disposition: attachment; filename=\"" $file_name ".pdf\"");
                
    header("Expires: 0");
                
    header("Pragma: no-cache");
            }

            echo 
    $pdf_content;
        } 
    Il problema è semplice. Su Mac, sia su Firefox che su Explorer, mi scarica il file, con il nome che gli ho dato attraverso il codice, e mi fa scegliere se visualizzarlo con Acrobat o Anteprima o semplicemente se salvarlo e visualizzarlo successivamente.
    Stesso comportamento su Windows, con Firefox.
    Su Explorer niente da fare, mi chiede se voglio salvare un file che ha il nome della pagina PHP che contiene questo script, senza estensione. Se lo scarico e gli aggiungo l'estensione .pdf allora mi visualizza correttamente il contenuto del documento, ma capite che non è una soluzione, nel senso che gli utenti del sito non possono fare tutti così, anche perché non tutti ci possono arrivare...
    Ho anche provato ad usare header("Content-type: application/pdf"); anziché ocret-stream, ma il risultato è il medesimo.
    Qualcuno mi può dare una mano a risolvere questo problema? E' una cosa piuttosto antipatica e dovrei risolverla al più presto.

    Grazie mille per l'aiuto!

  5. #5
    scusate ma..dato che file PDF o immagini sono piuttosto grossi in dimensioni di byte e quindi occupano un grande spazio nel database...io ho risolto il problema copiando PDF e immagini in apposite directory sul web server e poi nel database metto solo il link al PDF o all'immagine!

  6. #6
    Grazie al cavolo...
    Evidentemente se ho posto questa domanda è perché ho questo problema da risolvere e non posso farla così semplice...
    Io devo attenermi a questo metodo poiché il processo di gestione del sito in questione non mi permette di alzarmi al mattino e dire "ok, da oggi cambiamo tutto", visto che ci sono troppi fattori in mezzo, tra cui quello "umano".
    Un aiuto un tantino più costruttivo non mi dispiacerebbe, dunque.
    Grazie

  7. #7
    Ancora nessuna idea per siutarmi a risolvere questo fastidioso problema su Internet Explorer su piattaforma Windows?

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.