insert LONGBLOB d'un fichier pdf
Bonjour à tous,
j'ai un formulaire qui permet d'uploader des fichier pdf. Les fichier sont ensuite enregistrés au format LONGBLOB, dans une base de données MySQL.
Tout ça fonctionne bien, en local sur easyPhp (5.3.9)
Dès que je le met en production, sur un serveur 1and1, ça se complique...
Ca fonctionne pour certains fichiers, et pour d'autre, lorsque j'ouvre le PDF, j'ai le message "le fichier est endommagé".
voila le code pour la class "document"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<?php
class document {
var $id_document;
var $fichier_nom;
var $fichier_blob;
function nouveau() {
$sql = "INSERT INTO `documentation` (fichier_blob, fichier_nom) VALUES (";
$sql.= "'" . addslashes($this->fichier_blob) . "', ";
$sql.= "'" . addslashes($this->fichier_nom) . "'); ";
if (! mysql_query($sql) ) return mysql_error();
else return true;
}
}
?> |
Voila le traitement de l'upload
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
<?php
$pdf_blob = '';
$pdf_taille = 0;
$pdf_type = '';
$pdf_nom = '';
$oDocument = new document;
if ( is_uploaded_file ($_FILES['fichier']['tmp_name']) ) {
$pdf_blob = file_get_contents ($_FILES['fichier']['tmp_name']);
$pdf_type = $_FILES['fichier']['type'];
$pdf_nom = $_FILES['fichier']['name'];
if ( $pdf_type == "application/pdf" ) {
$oDocument->fichier_blob = $pdf_blob;
$oDocument->fichier_nom = $pdf_nom;
$oDocument->nouveau();
}
} else {
... traitement des erreurs
}
?> |
et le code de la page de download
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
<?php
$oDocument = new document;
$oDocument->id_document = $_REQUEST['id'];
$oDocument->construit_document();
$file_size = strlen($oDocument->fichier_blob);
$file_name = $oDocument->fichier_nom;
$file_content = $oDocument->fichier_blob;
if (empty ($file_size)) {
$message = new message(55);
die( header("location: document.php?id=" . $_REQUEST['id'] ) );
}
header("Content-disposition: attachment; filename=" . $file_name);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: application/pdf");
header("Content-Length: " . $file_size);
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
ob_clean();
flush();
echo $file_content;
?> |
Toute proposition sera la bienvenue.
Merci
Gilou.