ファイルが jpeg、pdf、または tiff であることを確認するにはどうすればよいですか? つまり、MIME タイプやファイル拡張子だけでなく、実際にチェックするということです。
生のファイル データにアクセスできます (このチェックはアップローダーの一部です)。ファイルが jpeg、pdf、または tiff のいずれかであることを確認する必要があります。ファイル内のある種のヘッダーを確認する必要があると思いますが、何を探してどこから始めればよいかわかりません。
Exif_imagetype はこれに非常に便利です: http://us2.php.net/manual/en/function.exif-imagetype.php
ファイルの最初のバイトをスキャンして、グラフィックの種類を判別します。多数のグラフィック形式をサポートしています (形式を認識しない場合は false を返します)。
raw ファイルにアクセスできる場合は、ファイル ヘッダーでそのマジック ナンバーを確認できます。この番号は、ファイルのタイプを定義します。
すべてのファイルは、基本的にフォーマットの「ヘッダー」である「マジックナンバー」が存在する特定の種類の ISO 標準に従う必要があるため、これは注意が必要です。
さまざまな署名に関するこの wiki ページを見つけました: http://en.wikipedia.org/wiki/List_of_file_signatures
したがって、最良のシナリオでは、これらの最初のバイトを検証するだけで済みます。
バイト シーケンス テストを実装する必要があります。
以下は、最も一般的な画像形式のバイト シーケンスをチェックするためのガイドです。
画像タイプを確認するには、exif_imagetype関数を使用できます。PDF の場合: ファイルを開いて最初のバイトを読み取り、「%PDF」で始まるかどうかを確認する必要があります。
$fp = fopen($pdf, 'r');
if(fgets($fp, 4) == '%PDF')
{
... is pdf
}
fclose($fp);