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