:
のFileInfo
あなたはから直接FileInfoを使用することができますPHP:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, 'the_file_to_check.ico');
// Should print something like 'image/x-icon'
finfo_close($finfo);
システムでFileInfoが設定されている場合、これはおそらく最も簡単な方法です。
ImageMagickのは
ImageMagickのは埋め込み画像を一覧表示、実際にファイルの内容を復号化することによって歩進ん:(この例では、コマンドラインから呼び出された)
$ identify favicon.ico
favicon.ico[0] ICO 16x16 16x16+0+0 32-bit sRGB 15.1KB 0.000u 0:00.000
favicon.ico[1] ICO 32x32 32x32+0+0 32-bit sRGB 15.1KB 0.000u 0:00.000
favicon.ico[2] ICO 48x48 48x48+0+0 32-bit sRGB 15.1KB 0.000u 0:00.000
FileInfoがICOファイルとどのように動作するのかわかりませんが、ImageMagickはおそらくファイルのかなりの部分をデコードする必要があるため、おそらくより安全です。
ImageMagickは多くのフォーマットをサポートしているので、その戻りコードだけでなく出力を確認することが重要です(JPG、SVGなどでも成功します)。
IcoUtils
のImageMagickに軽量の代替として、IcoUtilsは、トリックを行うことができます。
$ icotool -l favicon.ico
--icon --index=1 --width=16 --height=16 --bit-depth=32 --palette-size=0
--icon --index=2 --width=32 --height=32 --bit-depth=32 --palette-size=0
--icon --index=3 --width=48 --height=48 --bit-depth=32 --palette-size=0
$ icotool -l not_a_favicon.svg
favicon.svg: not an icon or cursor file (reserved non-zero)
残念ながら、そのリターンコードは、実際にその出力を確認するためにあなたを強制的に、常に0です。
それはとのUbuntuにインストールすることができます:あなたはhttps://github.com/lordelph/icofileloaderは、構文解析のためのネイティブPHP方法を提供し、任意の外部ツールの使用を避けたい場合は
sudo apt-get install icoutils
'Fileinfo'を使用してMIMEタイプを取得し、それをあなたの希望のMIMEタイプと比較してください。 http://php.net/Fileinfo –
ご意見ありがとうございます。それを確認する安全な方法ですか?私は、ユーザーがそれを改ざんしていないことを確認したい。もしそうなら、答えとしてあなたのコメントを残すことができます。正しい答えとしてマークします。@CharlotteDunois –
'このモジュールの関数は、ファイル内の特定の位置で特定のマジックバイトシーケンスを探して、ファイルのコンテンツタイプとエンコーディングを推測しようとします。ファイル。これは弾力的なアプローチではありませんが、ヒューリスティック手法は非常に良い仕事です。 '$ _FILES [...] ['mime'] 'に頼るよりはるかに優れています –