3

データベースクラスを呼び出し、画像のリストを要求する関数があります。これが機能です。

//Hämtar en array av filer från disk.
public function GetFiles()
{   

    $sql = "SELECT pic FROM pictures";
    $stmt = $this->database->Prepare($sql);

    $fileList = $this->database->GetAll($stmt);
    echo $fileList;
    if($fileList)
    {
        return $fileList;
    }
    return false;
}

そして、これはGetFilesが呼び出す私のデータベースクラスメソッドです。

public function GetAll($sqlQuery) {

        if ($sqlQuery === FALSE)
        {
            throw new \Exception($this->mysqli->error);
        }
        //execute the statement
        if ($sqlQuery->execute() == FALSE)
        {
            throw new \Exception($this->mysqli->error);
        }
        $ret = 0;
        if ($sqlQuery->bind_result($ret) == FALSE)
        {
            throw new \Exception($this->mysqli->error);
        }

        $data = array();
        while ($sqlQuery->fetch())
        {
            $data[] = $ret;
            echo $ret;
        }

        $sqlQuery->close();

        return $data;
    }

GetFiles関数の戻り値は、後で別の関数によって処理されます

public function FileList($fileList)
{
    if(count($fileList) == 0)
    {
        return "<p class='error'> There are no files in array</p>";
    }

    $list = '';
    $list .= "<div class='list'>";
    $list .= "<h2>Uploaded images</h2>";
    foreach ($fileList as $file) {

        $list .= "<img src=".$file." />";
    }
    $list .= "</div>";
    return $list;
}

しかし、私のデータベースはロングブロブを多くのカラクターとして返すだけです。ロングブロブを画像として表示するにはどうすればよいですか?

4

3 に答える 3

5

base64 でエンコードして、データ URI 経由で渡す必要があります。

<img src="data:image/jpeg;base64,<?php echo base64_encode($file) ?>" />

ただし、「大きな」画像を提供している場合、これはひどく肥大化したページになり、画像データをキャッシュして後でユーザーのダウンロード トラフィックを節約する方法がまったくありません。明示的に画像を提供するスクリプトを使用したほうがよいでしょう。

<img src="getimage.php?imageID=XXX" />

次に、そのスクリプトに db コードを含めます。

$blob = get_image_data($_GET[xxx]);
header('Content-type: image/jpeg');
echo $blob;

このような問題があるため、一般的にデータベースから画像を提供することはお勧めできません。

于 2012-10-08T16:37:54.863 に答える
1

Web ページの一部として埋め込む場合は、dataURI スキームを使用する必要があります。

正しいヘッダーを設定し、画像データをダンプ<img>する PHP ファイルをタグで指すようにすることをお勧めします。Content-Type

于 2012-10-08T16:36:57.077 に答える
0

次の理由から、イメージをファイルシステムに保存してそこからロードすることをお勧めします。

  • データベースのコストが高く、データベースのスケーリングが難しい
  • マイナーなタスクに多くのシステム リソースを使用する
  • Internet Explorer、特に IE8 では、34k を超える長さの src に対してエラーが発生します。

CDN オプションを調べます。

あなたが主張するなら

$list  = sprintf("<img src=\"data:image/jpeg;base64,%s\" />",base64_encode($file));    
于 2012-10-08T16:39:24.050 に答える