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 的File Info Functions检查文件的 MIME 类型。如果它以“application/pdf”类型返回,那么它应该是 PDF。

文件信息函数是在 PHP 5.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(但是,这并不能明确证明它是一个 PDF 文件,因为任何文件都可以以这 5 个字符开头)。正确 PDF 文件中接下来的 4 个字符包含版本号(即 1.2)。

于 2012-06-14T18:33:49.197 回答