Retrieving image from postgresql database using Yii2 (php)

做~自己de王妃 提交于 2019-12-11 04:35:41

问题


We have a problem retrieving uploaded image from postgres database with yii2

we store image with that way to the db:

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

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

stores image perfectly

but when we try to display image, it is not working:

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

echo pg_unescape_bytea(  $profile->passphoto);

I think the big problem is data after escaped it wont back to original be unescape

Any solutions?


回答1:


Consider this user-contributed comment in pg_unescape_bytea online doc:

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.

In fact, it's only true when the client library is older than 9.0 (libq.so.5.2 I believe, now EOL'ed).

If that is your case, that explains the problem of wrong unescaping.

To force bytea_output to escape to decode properly, you may either :

  • dynamically with SET bytea_output=escape; as a SQL command in the session
  • or statically for the whole database: ALTER DATABASE SET bytea_output=escape;
  • or in postgresql.conf for the whole instance.

The ideal solution would be to upgrade the libpq client library to a newer version, in which case none of this is necessary, it just works.



来源:https://stackoverflow.com/questions/32286608/retrieving-image-from-postgresql-database-using-yii2-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!