我正在阅读一些关于如何将图像作为二进制上传到数据库而不是将它们放在服务器本身上的教程,我让它像这样工作:
PHP:
$image = chunk_split(base64_encode(file_get_contents($tmpfile)));
mysql_query("INSERT INTO images (`img_location`, `caption`, `user`, `genre`, `when`) VALUES ('$image', '$caption', '$id', '$genre', '$when')");
我的问题是你现在如何从数据库中提取它,我已经阅读了几种方法,尝试了所有方法,无法弄清楚,我没有收到 MySQL 错误,这就是我的尝试方法:
$get_pics = mysql_query("SELECT * FROM images WHERE user='$id' ");
while($get_pics2 = mysql_fetch_array($get_pics))
{
$sixfour_enc = base64_decode($get_pics2['img_location']);
$new .= "<img src=\"".$sixfour_enc."\" >";
}
这有效......有点,发生的事情是它在 IMG 标签中打印出原始二进制文件。
如何让它再次编译为可读图像?另外,将图像存储在数据库中是愚蠢的吗?我应该像平常一样将它们存储在服务器上吗?
谢谢
-麦克风
如果您愿意,您可以将图像存储在数据库中(尽管将它们存储为文件也没有什么问题,选择适合您情况的任何内容),但将原始二进制数据存储在 BLOB 中(即不要使用64 进制)。您可以嵌入从中获得的二进制数据file_get_contents
直接在您的查询中,前提是您使用正确的转义函数(mysql_real_escape_string
在你的情况下)首先。
至于图像的输出,您可以按照现在的方式进行操作,但是您必须以 base64 编码并使用data
URI 方案如下:
echo '<img alt="embedded image" src="data:image/png;base64,' . chunk_split(base64_encode($get_pics2['img_location'])) . '">';
请注意,嵌入图像数据有一些优点和缺点。需要注意的一些重要缺点是 base64 编码的严重开销(比原始编码大约 33%)和潜在的缓存问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)