使用Yii2(php)从postgresql数据库中检索图像

时间:2015-08-29 13:31:55

标签: php postgresql yii2 bytea

我们在使用yii2

从postgres数据库检索上传的图片时遇到问题

我们将图像存储到db:

$data = pg_escape_bytea(file_get_contents($model->CheckIfAvatarExists(Yii::$app->user->identity->username)));

$profile->passphoto = new Expression("'{$data}'");
$profile->save();

完美存储图片

但是当我们尝试显示图片时,它无法正常工作:

header('Content-type: image/png');

echo pg_unescape_bytea(  $profile->passphoto);

我认为最大的问题是逃脱后的数据不会回到原来的风景中

任何解决方案?

1 个答案:

答案 0 :(得分:1)

pg_unescape_bytea在线文档中查看此用户提供的评论:

  

PostgreSQL 9.0引入了“hex”作为编码的新默认格式   二进制数据。因为“pg_unescape_bytea”仅适用于旧版本   “转义”格式,你需要做pg_query('SET bytea_output =   “逃逸”;');在执行您的选择查询之前。

事实上,只有当客户端库早于9.0 时才会出现这种情况(libq.so.5.2我认为,现在是EOL'ed)。

如果是这种情况,那就解释了错误的问题。

要强制bytea_output正确解码escape,您可以:

  • 动态地使用SET bytea_output=escape;作为会话中的SQL命令
  • 或静态用于整个数据库:ALTER DATABASE SET bytea_output=escape;
  • postgresql.conf整个实例。

理想的解决方案是将libpq客户端库升级到更新的版本,在这种情况下,这些都不是必需的,只是有效。