0

PHPスクリプト(Ubuntu3.6のPHP 5.3.10-1)からMSSQLサーバーに接続し、画像フィールドタイプから画像データを取得したいと思います。そして印刷したい。

MSSQL からデータを取得できますが、有効な画像として印刷/エコーできません。印刷/エコー/保存するにはどうすればよいですか?

$db= new PDO('odbc:MYODBC', '***', '***');
$stmt = $db->prepare("USE database");
$stmt->execute();
$tsql = "SELECT image 
         FROM Pics 
         WHERE id = 12";
$stmt = $db->prepare($tsql);
$stmt->execute();

$stmt->bindColumn(1, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);

header("Content-Type: image/jpg");

echo($lob); //not an image: 424df630030000000000360000002800 ...

imagecreatefromstring($lob);  // Data is not in a recognized format ...

$lob = fopen('data://text/plain;base64,' . base64_encode($lob), 'r'); //Resource
fpassthru($lob); //not an image: 424df63003000000000036000000280000 ...

PHP スクリプトのエンコーディング: UTF-8。

/etc/freetds/freetds.conf 内

[MYODBC]
host = myhost.com
client charset = UTF-8
tds version = 7

((MSSQL のサーバー上の sqlsrv を使用すると、次のように使用できます。

$image = sqlsrv_get_field( $stmt, 0, 
                      SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY));
header("Content-Type: image/jpg");
fpassthru($image);

)))

更新

echo base64_decode($lob); //Not an image: γn­τΣ}4ΣM4ΣM4ί­4ΣM4ΫΝ4ΣM4s­...
4

2 に答える 2

1

次のヘッダーを追加してみてください:

  • Content-Disposition
  • コンテンツ転送エンコーディング
  • コンテンツの長さ

PHPコードで:

header('Content-Type: image/jpg');
header('Content-Disposition:attachment; filename="my_file.jpg"');// Set the filename to your needs
header('Content-Transfer-Encoding: binary');
header('Content-Length: 12345');// Replace 12345 with the actual size of the image in bytes
于 2013-06-13T09:14:43.867 に答える
0

私は最近、同様のストレージの問題と戦っていました。データベース テーブルに挿入する前に、バイナリ イメージ データを引用していたことが判明しました。したがって、引用符を追加して文字列に変換していないことを確認してください-私が誤って行ったように。

データベースに保存する適切なデータを取得するために、既存のローカル ファイルに対して行う準備作業を次に示します。また、bin2hex() が利用可能であることを確認するか、関数の代替バージョンを入手してください。

function prepareImageDBString($filepath) {

    $out = 'null';
    $handle = @fopen($filepath, 'rb');
    if ($handle) {
        $content = @fread($handle, filesize($filepath));
        // bin2hex() PHP Version >= 5.4 Only!
        $content = bin2hex($content); 
        @fclose($handle);
        $out = "0x" . $content;
    }
    return $out;
}

これが誰かに役立つことを願っています。

于 2016-04-29T20:08:33.613 に答える