У нас проблема с получением загруженного изображения из базы данных 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);
Я думаю, что большая проблема заключается в том, что данные после выхода не возвращаются к исходному состоянию.
Какие-либо решения?
Считайте этот комментарий, добавленный пользователем, в 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
клиентская библиотека до более новой версии, в этом случае ничего из этого не требуется, она просто работает.
Других решений пока нет …