使用 PHP 获取损坏的图像检索 BLOB
Getting broken image retrieving BLOB with PHP
仅作记录,这是使用 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"];
?>
顺便说一句!这是我在 Whosebug 中的第一个问题!大家好!
编辑 1:
正如 hanshenrik 提到的,$wpdb->insert 正在转义输入,所以我上传图像然后将其写入磁盘,设置适当的扩展和 BOOM 就这样,现在我知道我实际上正在正确上传图像方式,但看起来我仍然无法尝试显示它,当使用 chrome 的开发人员工具时,我得到了这个:
GET http://127.0.0.1/pymes/wp-admin/Image_View.php 500(内部服务器错误)
那么,Image_View.php 有问题吗?查询实际上很好并且正在检索数据,因为我将该代码复制并粘贴到另一个地方并且它在 bin 文件中回显了整个字符。
编辑 2:
又来了!抱歉来晚了,我一直在工作
因此,我在上传图片时遇到的问题的解决方案已在编辑 1 中进行了说明(感谢 hanshenrik 建议 wpdb insert 正在转义输入)。
关于显示图片,我遇到了 Headers 在发送到之前遇到的问题:
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);
添加斜线?你疯了?如果 $wpdb->insert 没有为您转义,请使用适当的 SQL 转义函数。
无论如何,使用您当前的代码,这可能有效..
echo stripslashes($result["media"]);
或者也许
echo htmlspecialchars(stripslashes($result["media"]));
因此,在编辑 1 中解释了我在上传图片时遇到的问题的解决方案(感谢 hanshenrik 建议 wpdb insert 正在转义输入)。
关于显示图片,我遇到了 Headers 在发送到之前遇到的问题:
header("content-type: image/png");
所以我为此苦苦挣扎,我决定尝试对图像使用 URI,这解决了我的问题。对我来说,这更像是一种解决方法,而不是实际的修复方法,但它让我很满意。我实现 URI 的方式如下:
get_row("SELECT media FROM $wpdb->item WHERE item_id = $_GET[id]", ARRAY_A);
回声'';
?>
通过这样做,我不再需要 Image_View.php 文件。
非常感谢这里提供的帮助,TY 伙计们!
仅作记录,这是使用 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"];
?>
顺便说一句!这是我在 Whosebug 中的第一个问题!大家好!
编辑 1:
正如 hanshenrik 提到的,$wpdb->insert 正在转义输入,所以我上传图像然后将其写入磁盘,设置适当的扩展和 BOOM 就这样,现在我知道我实际上正在正确上传图像方式,但看起来我仍然无法尝试显示它,当使用 chrome 的开发人员工具时,我得到了这个:
GET http://127.0.0.1/pymes/wp-admin/Image_View.php 500(内部服务器错误)
那么,Image_View.php 有问题吗?查询实际上很好并且正在检索数据,因为我将该代码复制并粘贴到另一个地方并且它在 bin 文件中回显了整个字符。
编辑 2:
又来了!抱歉来晚了,我一直在工作
因此,我在上传图片时遇到的问题的解决方案已在编辑 1 中进行了说明(感谢 hanshenrik 建议 wpdb insert 正在转义输入)。
关于显示图片,我遇到了 Headers 在发送到之前遇到的问题:
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);
添加斜线?你疯了?如果 $wpdb->insert 没有为您转义,请使用适当的 SQL 转义函数。
无论如何,使用您当前的代码,这可能有效..
echo stripslashes($result["media"]);
或者也许
echo htmlspecialchars(stripslashes($result["media"]));
因此,在编辑 1 中解释了我在上传图片时遇到的问题的解决方案(感谢 hanshenrik 建议 wpdb insert 正在转义输入)。
关于显示图片,我遇到了 Headers 在发送到之前遇到的问题:
header("content-type: image/png"); 所以我为此苦苦挣扎,我决定尝试对图像使用 URI,这解决了我的问题。对我来说,这更像是一种解决方法,而不是实际的修复方法,但它让我很满意。我实现 URI 的方式如下:
get_row("SELECT media FROM $wpdb->item WHERE item_id = $_GET[id]", ARRAY_A);
回声''; ?> 通过这样做,我不再需要 Image_View.php 文件。
非常感谢这里提供的帮助,TY 伙计们!