从自定义WordPress数据库表返回图像(LONGBLOB)

时间:2018-02-22 04:27:54

标签: php mysql sql wordpress plugins

我正在尝试从我的数据库中返回一张图片。该图片为.jpg,且为19kb。图像也作为.bin保存在数据库中,我猜这是正确的吗?当从DB返回图像时,我遇到了一大堆奇怪的字符��z�Q�yi�j�ȗ�����<,这只是一小部分。

我已尝试设置标题header('Content-type: image/jpeg'),我只是从WordPress收到Cannot change headers...错误。有什么想法吗?

查询数据库并返回信息

  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...';
    }
  }

1 个答案:

答案 0 :(得分:1)

首先,在您的数据库中存储图像是一个非常糟糕的主意,并且会迅速扩大数据库的大小,并对性能产生负面影响。创建随机文件名并将图像存储在服务器上的文件夹中,然后在数据库中引用文件名,这是一个更好的主意。

也就是说,假设您无法控制数据库存储,那么您在设置标题时遇到问题的原因是您尝试将图片与同一页面请求中的内容混合在一起,您可以&#39 ; t在流中改变标题。设置标题仅在您设置了单独的脚本时才起作用,该脚本设置除了从数据库中获取图像并呈现它之外什么都不做,而没有其他内容。然后你只需要为该脚本创建url(使用任何查询参数来获取正确的图像)标准图像标记的src属性的内容。

或者,您可以获取从DB收到的大量图像数据,base64对其进行编码,添加前缀data:image/jpeg;base64,,并将其作为img标记的src属性。