After two days of search I come here with the hope of finding a solution.
I am actually trying to store files in the database (mysql), I know how bad it is, but we actually need to do a footprint of the application, so we can't store them with the sources.
I use 3 files:
- my form (classic html/php file)
- a php file who process data from form in order to put them into the DB
- another php file in order to get an image from the DB, sending a ID with
GET
The problem is that I can't display my image.
the form->
<?php echo ('<img src="profil_pic_display.php?uid_owner=' . $dCookie['uid']. '">'); //The display line ?> <form method="POST" action="upload_profil_pic.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="250000"/> Selectionnez une photo: <input type="file" name="avatar"/> <br/> <br/> <input class="ui-button" type="submit" value="Envoyer"/> <span><small>Formats accéptés: .png/.jpeg/.jpg/.gif | Taille max: 250ko</small></span> </form> Where the data form the form are processed->
<?php require_once ('bdd.php'); require_once ('cookie.php'); $dCookie = check_cookie(1); $maxSize = 250000; $extensions = array('.png', '.gif', '.jpg', '.jpeg'); // On verifit que le transfert s'est bien deroule et donc que l'image est bien stocke en tmp if (!isset($_FILES['avatar']) || !is_uploaded_file($_FILES['avatar']['tmp_name'])) { echo('Probleme de transfert'); die(); } $pData = $_FILES['avatar']; $pName = basename($pData['name']); $pType = $pData['type']; $pSize = filesize($pData['tmp_name']); // Verification de l'extension et de la taille if (!in_array(strrchr($pName, '.'), $extensions) || ($pSize > $maxSize)) { echo('Fichier non valide.'); die(); } // anihilation des ' ' et des accents. $pName = strtr($pName, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $pName = preg_replace('/([^.a-z0-9]+)/i', '_', $pName); //avant d'uplaoder une nouvelle image on supprime l'ancienne si il y a (en fonction de l'uid_owner $reqCheckOldPic = $GLOBALS['bdd']->prepare('DELETE FROM num_profil_picture WHERE uid_owner = :uid_owner;'); $reqCheckOldPic->bindParam(':uid_owner', $dCookie['uid']); __log($dCookie['uid'], 'DELETE', array('QUERY' => $reqCheckOldPic->queryString, 'VALUE' => array(':uid_owner' => $dCookie['uid']))); $reqCheckOldPic->execute(); $reqCheckOldPic->closeCursor(); // On prepare l'upload / recuperation du contenu binaire ET echappement du contenu binaire $pBlob = file_get_contents($pData['tmp_name']); $reqUpload = $GLOBALS['bdd']->prepare('INSERT INTO num_profil_picture (uid_owner, img_nom, img_taille, img_type, img_blob) VALUE (:uid_owner, :img_nom, :img_taille, :img_type, :img_blob);'); $reqUpload->bindParam(':uid_owner', $dCookie['uid']); $reqUpload->bindParam(':img_nom', $pName); $reqUpload->bindParam(':img_taille', $pSize); $reqUpload->bindParam(':img_type', $pType); $reqUpload->bindParam(':img_blob', addslashes($pBlob)); __log($dCookie['uid'], 'INSERT', array('QUERY' => $reqUpload->queryString, 'VALUE' => array( ':uid_owner' => $dCookie['uid'], ':img_nom' => $pName, ':img_taille' => $pSize, ':img_type' => $pType, ':img_blob' => $pBlob))); $reqUpload->execute(); $reqUpload->closeCursor(); header("Content-type: " . $pType); echo ($pBlob); ?> And here it is the display->
<?php require_once('bdd.php'); require_once('cookie.php'); $reqGetPic = $GLOBALS['bdd']->prepare('SELECT img_type, img_blob FROM num_profil_picture WHERE uid_owner = :uid_owner;'); $reqGetPic->bindParam(':uid_owner', $_GET['uid_owner']); $reqGetPic->execute(); $pic = $reqGetPic->fetch(); header("Content-type: " . $pic[0]); header('Content-transfer-encoding: binary'); echo ($pic[1]); ?>
$pic[0]contains a valid MIME type?