【问题标题】:Returning Image (LONGBLOB) from Custom WordPress DB Table从自定义 WordPress 数据库表返回图像 (LONGBLOB)
【发布时间】:2018-08-01 20:19:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: php mysql sql wordpress plugins


    【解决方案1】:

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

    也就是说,假设您无法控制数据库存储,您在设置标头时遇到问题的原因是您试图将图像与同一页面请求中的内容混合在一起,并且您无法更改标头中游。仅当您设置了一个单独的脚本,该脚本只从数据库中获取图像并渲染它,没有其他内容时,设置标题才有效。然后,您只需将该脚本的 url(使用获取正确图像所需的任何查询参数)设置为标准图像标记的 src 属性的内容。

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

    【讨论】:

    • 感谢您的建议和解释。我想我会接受你的第一个建议。这是我正在尝试创建的一个插件,所以我会看看我能做些什么来将它上传到媒体库。谢谢!
    猜你喜欢
    • 2015-06-08
    • 2016-03-03
    • 2014-12-22
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2015-01-22
    相关资源
    最近更新 更多