web-dev-qa-db-ja.com

アップロードされたファイルタイプを確認する方法はpdfです

重複の可能性:
アップロードされたファイルのファイルタイプをPHPで確認する方法

私のサイトにはアップロード機能があり、PDFのアップロードのみが許可されています。アップロードされたファイルがPDFのみであることを確認する方法よりも、画像ファイルをチェックするgetimagesize()と同じです。ファイルがpdfであることを確認する方法はありますか?私のコードを以下に示します。

$whitelist = array(".pdf");

foreach ($whitelist as $item) {

    if (preg_match("/$item\$/i", $_FILES['uploadfile']['name'])) {

    }
    else {

        redirect_to("index.php");
    }
}

$uploaddir='uploads/';

$uploadfile = mysql_prep($uploaddir . basename($_FILES['uploadfile']['name']));

if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile)) {

    echo "succussfully uploaded";
}

このredirect_toおよびmysql_prepは私が定義した関数です。しかし、MIMEタイプはヘッダーを使用して変更できます。そのため、ファイルが元のPDFであることを確認する方法はありますか?

11
StaticVariable

PHPの File Info Functions を使用して、ファイルのMIMEタイプを確認できます。タイプ「application/pdf」で返される場合は、PDFである必要があります。

ファイル情報関数はPHP 5.3で追加されましたが、それより前は mime_content_type 関数を使用できます。

17
Ben Evans
mime_content_type('file.ext');

mime_content_type()

9
HBv6

PDF マジックナンバー を探します。ファイルを開いて、データの最初の数バイトを読み取ります。ほとんどのファイルには特定の形式があり、PDFファイルは %PDF で始まります。

ファイルの最初の5文字を​​確認できます。「%PDF-」と等しい場合、それはありそうです実際のPDF(ただし、これはそれがPDFファイルであり、どのファイルもこれらの5文字で開始できるため)であることを明確に証明するものではありません。適切な次の4文字PDFファイルにはバージョン番号(1.2など)が含まれています。

8
Mike