Download BLOB troncato a 1 MB Script funziona per file inferiori a 1 MB

Recentemente ho chiesto e risolto una domanda relativa al caricamento di file .PDF superiori a 2 MB in un database MySQL come BLOB. Ho dovuto modificare alcune impostazioni nel mio file php.ini e nella configuration massima dei pacchetti MySQL. Tuttavia, la risoluzione di questo problema mi ha portto a scoprire un nuovo problema con il mio script.

Da quando posso caricare i file nel mio database BLOB, ho tentato di scaricare il file a scopo di test. Con mio grande sgomento quando sono andato ad aprire il file .PDF ho ricevuto il seguente errore: Imansible caricare il documento (errore 3) 'file: ///tmp/test-13.pdf'. Dopo ulteriori indagini ho scoperto che il file scaricato, test.pdf, era solo 1 MB, poco less della metà della sua presunta dimensione nel database di poco più di 2 MB. Questo è ovviamente il motivo dell'errore.

Il seguente pezzo di codice è la parte del mio script che sto usando per scaricare i file dal database. Si trova nella parte superiore dello script e funziona in modo impeccabile per i file inferiori a 1 MB.

foreach($_REQUEST as $key => $value) { if ($value == 'Open') { header(); session_start(); $dbh = new PDO('mysql:host='.$_SESSION['OpsDBServer'].'.ops.tns.its.psu.edu; dbname='.$_SESSION['OpsDB'], $_SESSION['yoM'], $_SESSION['aMa']); $id = $key; $sqlDownload = "SELECT name, type, content, size FROM upload WHERE id='".$id."'"; $result = $dbh->query($sqlDownload); $download = $result->fetchAll(); $type = $download[0]['type']; $size = $download[0]['size']; $name = $download[0]['name']; $content = $download[0]['content']; header("Content-type: $type"); header("Content-Disposition: inline; filename=$name"); header("Content-length: $size"); header("Cache-Control: maxage=1"); header("Pragma: public"); echo $content; exit; } } 

Sto pensando che forse ho alcune dichiarazioni di intestazione sbagliate? Sono molto confuso su cosa fare. Ho cercato su php.ini e non ho trovato impostazioni che ritengo debbano essere cambiate e la mia impostazione massima di pacchetti per MySQL è di 4 MB, quindi è necessario scaricare 2 MB.

Grazie per qualsiasi aiuto.

Secondo ( http://dev.mysql.com/doc/refman/5.0/en/blob.html ):

La dimensione massima di un object BLOB o TEXT è determinata dal tipo, ma il valore più grande che è effettivamente ansible trasmettere tra client e server è determinato dalla quantità di memory disponibile e dalla dimensione dei buffer di comunicazione. È ansible modificare la dimensione del buffer dei messaggi cambiando il valore della variabile max_allowed_packet, ma è necessario farlo sia per il server che per il programma client .

Secondo ( http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html ) il valore predefinito per max_allowed_packet è 1048576.

In realtà ho risolto il problema. Ho cambiato tutti i valori che sono stati raccomandati qui in php.ini e my.cnf ma ho anche avuto bisogno di cambiare un'impostazione per PDO.

Ho cambiato: PDO :: MYSQL_ATTR_MAX_BUFFER_SIZE (numero integer) Dimensione massima del buffer. Il valore predefinito è 1 MiB.

Questo deve essere impostato quando l'object PDO viene creato per funzionare però. Tutto va bene ora.