gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:26:52 29 4
gpt4 key购买 nike

我们在使用 yii2 从 postgres 数据库中检索上传的图像时遇到问题

我们以这种方式将图像存储到数据库中:

$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);

我认为最大的问题是转义后的数据不会恢复原状

有什么解决办法吗?

最佳答案

pg_unescape_bytea 中考虑这个用户贡献的评论在线文档:

PostgreSQL 9.0 introduced "hex" as the new default format for encoding binary data. Because "pg_unescape_bytea" only works with the old "escape" format, you need to do pg_query('SET bytea_output = "escape";'); before executing your select queries.

事实上,只有当客户端库早于 9.0(我相信 libq.so.5.2,现在已停产)时才是正确的。

如果是你的情况,那就解释了错误转义的问题。

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

  • 动态地使用 SET bytea_output=escape; 作为 session 中的 SQL 命令
  • 或静态地针对整个数据库:ALTER DATABASE SET bytea_output=escape;
  • 或在 postgresql.conf 中获取整个实例。

理想的解决方案是将 libpq 客户端库升级到更新的版本,在这种情况下,这些都不是必需的,它可以正常工作。

关于php - 使用 Yii2 (php) 从 postgresql 数据库中检索图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32286608/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com