1

php のデータベースから画像を表示できず、このようなエラーが発生します。このコードを実行すると、このようなエラーが発生しますエラーが含まれているため、画像を表示できません。画像は mysql データベースに保存され、フィールド タイプは BLOB です。IT 部門は、このエラーを回避する解決策を見つけられませんでした。

<?php
require_once('database/db.class.php');
$objDatabase=new db_class();
$objDatabase->connect();
$sql="SELECT id,firstname,lastname,sex,email,userimage,ext,city,state,username FROM t_users WHERE username='".$_SESSION['username']."'";
$totalRow=$objDatabase->select($sql);
if($row=$objDatabase->get_row($totalRow, 'MYSQL_BOTH'))
    {
        $userArray=array('id'=>$row['id'],'firstname'=>$row['firstname'],'lastname'=>$row['lastname'],'sex'=>$row['sex'],'email'=>$row['email'],'userimage'=>$row['userimage'],'ext'=>$row['ext'],'city'=>$row['city'],'state'=>$row['state'],'username'=>$row['username']);
    }

?>


  <table cellspacing="10px" width="100%">
  <tr>
  <td width="23%" style="vertical-align:top">
  <?php
    header("Content-type: image/{$userArray['ext']}");
    header("Content-Length: " . strlen($userArray['userimage']));
    echo  $userArray['userimage'];
  ?>
 </td>
</tr>
</table>

画像コードをアップロード

@list(, , $imtype, ) = getimagesize($_FILES['photo']['tmp_name']);
    // Get image type.
    // We use @ to omit errors

if ($imtype == 3) // cheking image type
$ext="png";   // to use it later in HTTP headers
elseif ($imtype == 2)
$ext="jpeg";
elseif ($imtype == 1)
    $ext="gif";
else
$msg = 'Error: unknown file format';

   $img = file_get_contents($_FILES['photo']['tmp_name']);
$img = mysql_real_escape_string($img);
        // Preparing data to be used in MySQL query

$data=array('firstname'=>$_REQUEST['firstname'],'lastname'=>$_REQUEST['lastname'],'sex'=>$_REQUEST['gender'],'email'=>$_REQUEST['email'],'userimage'=>$img,'ext'=>$ext,'city'=>$_REQUEST['city'],'state'=>$_REQUEST['state'],'zipcode'=>$_REQUEST['zipcode'],'username'=>$_REQUEST['usernameText'],'password'=>$_REQUEST['passwordText']);
$result=$objDatabase->insert_array('t_users',$data);    


 <input name="photo" type="file" id="photo">
4

2 に答える 2

1

まあ、これはそれを行う方法ではありません。通常どおり画像を保存し、パスをデータベースに保存するだけです。

この方法でやりたい場合は、image.php のような名前の新しいファイルを作成し、次に配置する必要があります。

<?php

require_once('database/db.class.php');

$objDatabase=new db_class();
$objDatabase->connect();
$sql="SELECT id,firstname,lastname,sex,email,userimage,ext,city,state,username FROM t_users WHERE username='".$_SESSION['username']."'";
$totalRow=$objDatabase->select($sql);

if($row=$objDatabase->get_row($totalRow, 'MYSQL_BOTH'))
{
    $userArray=array('id'=>$row['id'],'firstname'=>$row['firstname'],'lastname'=>$row['lastname'],'sex'=>$row['sex'],'email'=>$row['email'],'userimage'=>$row['userimage'],'ext'=>$row['ext'],'city'=>$row['city'],'state'=>$row['state'],'username'=>$row['username']);
}

header("Content-type: image/{$userArray['ext']}");
header("Content-Length: " . strlen($userArray['userimage']));
echo  $userArray['userimage'];
?>

そのファイルに。

次に、テーブルで使用します

<img src='/image.php ?>' alt='' />

ただし、パスを DB に格納するだけで、ファイル システムではないデータベースにバイナリ データを格納する必要があることはまれです。その理由については、ここでは説明しません。

于 2012-08-26T15:42:36.597 に答える
1

編集- 含めるのを忘れていました: base64 ファイルは BLOB よりかなり大きくなります。


BLOB ではなく base64 として保存してみてください。

これはhttp://www.php.net/manual/en/function.base64-encode.phpで見つけた関数です

function base64_encode_image ($filename=string,$filetype=string) {
    if ($filename) {
        $imgbinary = fread(fopen($filename, "r"), filesize($filename));
        return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
    }
}

データベースから画像を取得すると、それは base64 文字列になります。この文字列を HTML の src="" 属性に直接入れることができます (デコードする必要はありません)。ブラウザは base64 を解析して画像を表示できます。

于 2012-08-26T15:43:19.470 に答える