web-dev-qa-db-ja.com

ヘッダーを設定します(content-type:image / <ANY IMG FORMAT>)

私が表示する画像を処理するphpファイルでは、.jpg、.png、.bmpなどの1つの画像形式しか使用できませんが、すべてではありません。 imageNameは、データベースに保存されている画像のファイル名とその形式を格納します。これは私のコードですが、これまでのところまだ機能しておらず、それが許可されているかどうかはわかりません。修正を手伝ってもらえますか?

$con = mysqli_connect("localhost","root","","tickets");
$ticket = 109;
$result = mysqli_query($con,"SELECT image, imageName FROM tix WHERE tktNum=$ticket");


while($row = mysqli_fetch_array($result))
{
    $image = $row['image'];
    $imageName = $row['imageName'];
    $format = substr( $imageName, -3 ); //gets the last 3 chars of the file name, ex: "photo1.png" gets the ".png" part
    header('content-type: image/' . $format);
}
5
user3663049

解決策は、ファイルを読み込んで、それがどの種類の画像であるかを判断し、それに基づいて適切なヘッダーを送信することです。

$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));

switch( $file_extension ) {
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpeg"; break;
    case "svg": $ctype="image/svg+xml"; break;
    default:
}

header('Content-type: ' . $ctype);
6
D555

私はこれを使用しました。画像であることを示していますが、画像の種類は指定していません。

header("Content-type: image");

ファイルの種類に関係なく、問題なく動作しているようです。 IE、Firefox、Safari、およびAndroidブラウザでテストしました。

11
John