1

初めまして、ご覧いただきありがとうございます。説明させてください:

データベースの longblob フィールドに配置したいディスク上の画像があります。これは一般的に推奨されていないことを読みましたが、これはまだ私のアプリケーションで必要なものです。

画像をインポートするために、クラスに次のコードがあります。

$file_handle = fopen("$folder_path/$image","rb");
$file_content = fread($file_handle,filesize("$folder_path/$image"));

$image_record["file_name"] = $image;
$image_record["file_folder_id"] = $folder_data["folder_id"];
$image_record["file_owner_id"] = $this->current_user_data["user_id"];
$image_record["file_mime_type"] = mime_content_type("$folder_path/$image");
$image_record["file_binary"] = addslashes($file_content);

if($this->db_insert("file", $image_record))
{

    $this->view_file($this->load_file($image));
    echo header("Content-type:".$image_record["folder_type"]);
    $this->view_file($this->load_file($image));
    echo stripslashes($image_record["folder_binary"]);
}

バイナリをデータベースに保存しようとすると、そのプロセスによって画像データが破損しているようです。

同じ正確なコードを使用すると、 $db->insert() ステートメントは、ほぼ同一のデータベース スキーマを持つ別の Web サイトで問題なく動作します。ただし、動作するストレージ エンジンは MyISAM ではなく InnoDB です。

if ステートメント内のコードは常に画像を表示するため、ファイルを読み取ったり表示したりするときにデータの破損が発生するのではないかと疑っています。

何が起こっているのか理解するのを手伝ってください。

ありがとう!

4

1 に答える 1

-1

画像をbase64でエンコードしてロングテキストフィールドに保存する必要があります。少なくともそれが私がしていることであり、うまく機能することがわかりました。また、データベースから base64 レコードを取得するときに、実際には base64 文字列をイメージの src プロパティにエコーアウトできます。ドキュメントは次のとおりです: http://php.net/manual/en/function.base64-encode php

于 2012-08-24T17:16:45.980 に答える