使用php / html显示mysql blob图像 [英] mysql blob image displaying with php/html
本文介绍了使用php / html显示mysql blob图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
经过两天的搜索,我来到这里希望找到解决方案。
After two days of search I come here with the hope of finding a solution.
我实际上是在尝试将文件存储在数据库中(mysql),我知道它有多糟糕,但我们实际上需要做一个应用程序的足迹,所以我们不能用源存储它们。
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.
我使用3个文件:
- 我的表格(经典的html / php文件)
- 从表格中按顺序处理数据的php文件将它们放入DB
- 另一个php文件,以便从数据库中获取图像,发送带有
GET
的ID
- 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.
表格 - >
<?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>
处理表格中的数据 - >
<?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);
?>
这里是显示 - >
<?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]);
?>
推荐答案
好的,我找到了解决方案,使用数据URI。如果遇到麻烦,请访问此处获取更多信息: php:从二进制数据中重新创建并显示图像。
Ok i found out the solution, using data URI. If you are in trouble, go here for more info: php: recreate and display an image from binary data.
这篇关于使用php / html显示mysql blob图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文