web-dev-qa-db-ja.com

PHP)のfile_get_contentsで画像のMIMEタイプを取得する方法

画像のMIMEタイプを取得する必要がありますが、file_get_contentsで取得した画像の本文しかありません。 MIMEタイプを取得する可能性はありますか?

15
Zwen2012

はい、このように入手できます。

$file_info = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $file_info->buffer(file_get_contents($image_url));
echo $mime_type;
34
Ram Sharma

Mimeタイプのみをチェックして、何をするかに十分注意してください。画像が実際に画像であることを本当に確認したい場合、これを行う最も安全な方法は、画像操作ライブラリで画像を開き、ライブラリで書き込むことです。イメージが実際に悪意のあるコードである場合、これは失敗し、実際にイメージファイルをディスクに書き込んでいることが保証されます。この例として、MIMEをだまして、悪意のあるコードがGIFであると思わせることができます。

質問に直接答えるには、 FileInfo PECLモジュール を使用してください。

5

HTTPを使用してファイルをダウンロードする場合は、MIMEタイプを推測(自動検出)しないでください。 file_get_contentsを使用してファイルをダウンロードした場合でも、HTTPヘッダーにアクセスできます。

$http_response_header を使用して、最後のfile_get_contents呼び出し(または http://ラッパー )のヘッダーを取得します。

$contents = file_get_contents("https://www.example.com/image.jpg");
$pattern = "/^content-type\s*:\s*(.*)$/i";
if (($header = array_values(preg_grep($pattern, $http_response_header))) &&
    (preg_match($pattern, $header[0], $match) !== false))
{
    $content_type = $match[1];
    echo "Content-Type is '$content_type'\n";
}
1
Martin Prikryl