用PHP获取损坏的图像检索BLOB


Getting broken image retrieving BLOB with PHP

只是记录一下,这是用Wordpress完成的(我也没有选择它,也没有将图像存储在DB中(。

基本上,我试图使用php将图像存储在数据库中,并在稍后显示,但我得到了一个损坏的图像图标。(相信我,我一直在研究这个问题,但我找不到问题所在(。

这就是我存储图像的方式:

HTML:

<input type="file" name="img" id="media">

PHP:

$item['media'] = addslashes (file_get_contents($_FILES['img']['tmp_name']));
$result = $wpdb->insert($table_name, $item);

这就是我试图找回它的方式:

HTML:

<img src="Image_View.php?image_id=<?php echo $item["item_id"]; ?>"/>

Image_View.PHP:

<?php
  global $wpdb;
  $result =  $wpdb->get_row("SELECT media FROM $wpdb->item WHERE item_id = 3", ARRAY_A);
  header("content-type: image/png");
  echo $result["media"];
?>

顺便说一句!这是我在Stackoverflow中的第一个问题!大家好!


编辑1:

正如hanshenrik所提到的,$wpdb->insert正在转义输入,所以我上传了图像,然后将其写入磁盘,设置了正确的内容和BOOM,现在我知道我实际上是以正确的方式上传图像的,但看起来我在尝试显示它时仍然有困难,当使用chrome的开发工具时,我得到了这个:

得到http://127.0.0.1/pymes/wp-admin/Image_View.php500(内部服务器错误(

那么,Image_View.php有什么问题吗?这个查询实际上很好,并且正在检索数据,因为我将代码复制并粘贴到了另一个地方,它呼应了bin文件中的大量字符。


编辑2:

再次!很抱歉在这件事上迟到了,我一直在工作

因此,我在上传图像时遇到的问题的解决方案已经在Edit 1中解释过了(感谢hanshenrik提出wpdb插入正在转义输入(。

关于显示图像,在它到达之前,我遇到了发送标头的问题

header("content-type: image/png");

所以我很难做到这一点,我决定尝试使用URI作为图像,这解决了我的问题。对我来说,这更多的是一种变通方法,而不是一种实际的解决方案,但它让我的船漂浮起来。我实现URI的方式如下:

<?php
global $wpdb;
$result =  $wpdb->get_row("SELECT media FROM $wpdb->item WHERE item_id = $_GET[id]", ARRAY_A);
echo '<img src="data:image/png;base64,'.base64_encode($result['media']).'" height="100" width="100"/>';
?>

这样我就不再需要Image_View.php文件了。

真的很感谢这里提供的帮助,TY伙计们!

$item['media'] = addslashes (file_get_contents($_FILES['img']['tmp_name']));
$result = $wpdb->insert($table_name, $item);

addslashes?你疯了吗?如果$wpdb->insert不能为您转义,请使用适当的SQL转义函数。

无论如何,使用您当前的代码,这可能会起作用。。

 echo stripslashes($result["media"]);

或者

echo htmlspecialchars(stripslashes($result["media"]));

因此,我在上传图像时遇到的问题的解决方案已经在Edit 1中解释过了(感谢hanshenrik提出wpdb insert正在转义输入(。

关于显示图像,在它到达之前,我遇到了发送标头的问题

页眉("内容类型:image/png"(;所以我很难做到这一点,我决定尝试使用URI作为图像,这解决了我的问题。对我来说,这更多的是一种变通方法,而不是一种实际的解决方案,但它让我的船漂浮起来。我实现URI的方式如下:

get_row("从$wpdb->item WHERE item_id=$_get[id]中选择媒体",ARRAY_A(;

echo";?>这样我就不再需要Image_View.php文件了。

真的很感谢这里提供的帮助,TY伙计们!