1

アップロードされた画像を yii2 で postgres データベースから取得する際に問題があります

その方法で画像をデータベースに保存します:

$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);

大きな問題は、エスケープされた後のデータが元に戻らないことだと思います。

解決策はありますか?

4

1 に答える 1

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 になっています)。

それがあなたの場合であれば、それは間違ったエスケープ解除の問題を説明しています。

強制的bytea_outputescape正しくデコードするには、次のいずれかを実行できます。

  • SET bytea_output=escape;セッションでSQLコマンドとして動的に
  • またはデータベース全体に対して静的に:ALTER DATABASE SET bytea_output=escape;
  • またはpostgresql.confインスタンス全体で。

理想的な解決策は、libpqクライアント ライブラリを新しいバージョンにアップグレードすることです。この場合、これは必要なく、機能します。

于 2015-08-29T14:31:24.433 に答える