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

标签 php mysql sql wordpress plugins

我正在尝试从数据库返回图像。该图像是 .jpg19kb 。该图像也被保存在数据库中作为 .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/

相关文章:

php - 在 Laravel 网络应用程序中运行网络抓取 cronjob 以将数据保存到数据库的理想方式

php - 从 Base64 字符串中提取图像尺寸

php - MySQL 与 PHP 的时区问题

mysql - Openshift Mysql 5.5 卡带如何访问日志?

javascript - 在javascript中获取多个 "contenteditables"的值

mysql - 什么是 MySQL Collat​​ion,如何在实践中使用它?

php - MYSQL 查询到 Codeigniter 查询

sql - 按日期降序排列父行,子行在每个行下独立排序

MySQL工作台,将select from view的结果导出为JSON

mysql - 1 : The action 'Install' for product 'MySQL Server 5.7.21' failed