使用PHP检索BLOB的破碎图像

时间:2015-08-26 15:01:15

标签: php html image blob store

仅仅是为了记录,这是用Wordpress完成的(我没有选择它,也不是将图像存储在数据库中)。

基本上我尝试使用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-&gt; insert正在转移输入,所以我上传并将图像写入磁盘,设置适当的扩展和BOOM你去,现在我知道我实际上正确上传图像,但是当我使用chrome的开发者工具时,看起来我仍然在尝试显示它时遇到麻烦:

获取http://127.0.0.1/pymes/wp-admin/Image_View.php 500(内部服务器错误)

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

编辑2:

再次!抱歉迟到了,我一直在工作

因此,在编辑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提供的帮助!

2 个答案:

答案 0 :(得分:0)

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

和addslashes?你疯了吗?使用正确的SQL转义函数,如果$ wpdb-&gt; insert不能为你转义。

无论如何,使用您当前的代码,这可能会有效..

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

或者

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

答案 1 :(得分:0)

因此,在编辑1中解释了上传图像时我的问题的解决方案(感谢hanshenrik建议wpdb插入转出输入)。

关于显示图像,我在发送标题之前遇到了麻烦:

标题(&#34; content-type:image / png&#34;); 所以我在这方面苦苦挣扎,我决定尝试使用URI来解决我的问题。对我来说,这更像是一种解决方法,而不是一种实际的修复,但它浮现在我的船上。我实现URI的方式如下:

get_row(&#34; SELECT media FROM $ wpdb-&gt; item WHERE item_id = $ _GET [id]&#34;,ARRAY_A);

回声&#39;&#39 ;; ?&GT; 通过这样做,我不再需要Image_View.php文件。

非常感谢TY提供的帮助!