画像のMIMEタイプを取得する必要がありますが、file_get_contents
で取得した画像の本文しかありません。 MIMEタイプを取得する可能性はありますか?
はい、このように入手できます。
$file_info = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $file_info->buffer(file_get_contents($image_url));
echo $mime_type;
Mimeタイプのみをチェックして、何をするかに十分注意してください。画像が実際に画像であることを本当に確認したい場合、これを行う最も安全な方法は、画像操作ライブラリで画像を開き、ライブラリで書き込むことです。イメージが実際に悪意のあるコードである場合、これは失敗し、実際にイメージファイルをディスクに書き込んでいることが保証されます。この例として、MIMEをだまして、悪意のあるコードがGIFであると思わせることができます。
質問に直接答えるには、 FileInfo PECLモジュール を使用してください。
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";
}