Получение изображения из базы данных 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 = "escape";'); перед выполнением ваших запросов выбора.

Фактически, это верно только тогда, когда клиентская библиотека старше 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 клиентская библиотека до более новой версии, в этом случае ничего из этого не требуется, она просто работает.

Другие вопросы по тегам