Mi sto scervellando da 3 ore su un problema che non riesco proprio a capire.
Ho dei file memorizzati in dei campi blob del database mysql (tabella InnoDB).
Al momento della memorizzazione del file, inserisco in un apposito campo anche il mime type ed il filename.
Il file inoltre viene associato a degli utenti onde impedire che il file venga visto da persone non autorizzate.
Codice PHP:
session_start();
mysql_connect("localhost", "XYZ", "123") or die("Impossibile collegarsi al database");
mysql_select_db('smart');
$id = intval($_GET['id']);
$query = "SELECT files.file,files.mime,files.nome FROM `assFiles` INNER JOIN `files` ON assFiles.file=files.id WHERE assFiles.file=".$id." AND assFiles.utente=".$_SESSION['id'];
$res = mysql_query($query) or die("errore nell'estrapolazione del file dal database ".mysql_error());
$num = mysql_num_rows($res);
if ($num > 0) {
$result = mysql_fetch_object($res);
header("Content-type: {$result->mime}");
header("Content-Disposition: filename={$result->nome}");
header("Content-Transfer-Encoding: binary");
echo $result->file;
}
Quello di cui sopra è il codice per la visualizzazione del file.
In pratica controllo che la variabile di sessione "id" sia associata all'id del file. Se così fosse parto col codice per la visualizzazione del file.
Il problema è che con internet exploder 6 su Windows XP (con e senza il virus denominato Service Pack 2) non solo il file non viene visualizzato, ma addirittura mi dice che è impossibile trovare lo script a cui sto puntando (il percorso è corretto).
A scanso di equivoci vi dico subito che con Firefox si apre tranquillamente l'applicazione (se è un file di tipo .doc ad esempio si apre il Word).
Ho pensato che magari fosse il "session_start()" ad inizio dello script che potesse dar fastidio (in effetti togliendolo non mi dà problemi). Peccato che lo stesso script utilizzato in un altro sito sullo stesso server non mi dà problemi e che per file di tipo immagine (jpeg,gif o png che siano) il problema non si pone (sia con exploder che con firefox riesco a vedere i file immagine memorizzati nel db).