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'] > 0 ? "_extra" : "";
$file_name = trim(strtolower(substr($row['oggetto'], 0, 10))) . $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!