我正在尝试从数据库返回图像。该图像是 .jpg
是 19kb
。该图像也被保存在数据库中作为 .bin
,我猜这是正确的?从数据库返回图像时,我遇到了很多奇怪的字符 ��z�Q�yi�j�ȗ�����<
这只是一小部分。
我尝试设置标题 header('Content-type: image/jpeg')
我刚刚收到 Cannot change headers...
来自 WordPress 的错误。有什么想法吗?
查询DB并返回信息
public static function output_lyrics($atts) {
global $wpdb;
$table_name = $wpdb->prefix.'bb_hello_dolly';
$sql = "SELECT
text, pic
FROM
$table_name;";
$result = $wpdb->get_results($sql, 'ARRAY_A');
if ($result) {
$san_lyrics = explode("\n", sanitize_textarea_field( $result[0]['text'] ) );
header("Content-type: image/jpeg");
echo '<img src="'.$result[0]['pic'].'">';
return $san_lyrics[ rand(0, count($san_lyrics) - 1 ) ];
} else {
echo 'Whoops, I think I forgot the lyrics...';
}
}
最佳答案
首先,将图像存储在数据库中是一个非常糟糕的主意,并且会迅速增加数据库的大小,并对性能产生负面影响。更好的主意是创建一个随机文件名并将图像存储在服务器上的文件夹中,然后在数据库中引用该文件名。
也就是说,假设您无法控制数据库存储,那么您在设置 header 时遇到问题的原因是您试图将图像与同一页面请求上的内容混合,并且无法更改 header 中流。仅当您设置了一个单独的脚本,该脚本除了从数据库中获取图像并渲染它之外什么都不做,没有其他内容时,设置标题才有效。然后,您只需将该脚本的 url(使用获取正确图像所需的任何查询参数)设置为标准图像标记的 src 属性的内容即可。
或者,您可以获取从数据库收到的大量图像数据,对其进行 base64 编码,添加前缀 data:image/jpeg;base64,
,然后将其作为 src img 标签的属性。
关于php - 从自定义 WordPress 数据库表返回图像 (LONGBLOB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48919679/