13

重複の可能性:
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_tomysql_prepは私が定義します。ただし、MIME タイプはヘッダーを使用して変更できます。ファイルが元のpdfであることを確認する方法はありますか?

4

3 に答える 3

18

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

ファイル情報関数はPHP5.3で追加されましたが、それ以前はmime_content_type関数を使用できました。

于 2012-06-14T18:31:03.150 に答える
11
mime_content_type('file.ext');

mime_content_type()

于 2012-06-14T18:34:55.127 に答える
8

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

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

于 2012-06-14T18:33:49.197 に答える