Получение изображения из базы данных postgresql с использованием Yii2 (php)

У нас проблема с получением загруженного изображения из базы данных postgres с помощью yii2

мы храним изображение таким образом в БД:

$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

Решение

Считайте этот комментарий, добавленный пользователем, в pg_unescape_bytea онлайн документ:

PostgreSQL 9.0 ввел «hex» как новый формат по умолчанию для кодирования
двоичные данные. Потому что «pg_unescape_bytea» работает только со старым
«escape» формат, вам нужно сделать 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 клиентская библиотека до более новой версии, в этом случае ничего из этого не требуется, она просто работает.

1

Другие решения

Других решений пока нет …