如何检查上传的文件类型是pdf

Sta*_*ble 11 html php pdf

可能重复:
如何在PHP中检查上传文件的文件类型?

我在我的网站上传了功能,只允许pdf上传.如何检查上传的文件是否只是pdf.只是喜欢ckeck 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";
}
Run Code Online (Sandbox Code Playgroud)

在这redirect_to,mysql_prep并由我定义的功能.但是mime类型可以使用headers更改.所以有什么方法可以检查文件是orignal pdf吗?

Ben*_*ans 17

您可以使用PHP的文件信息功能检查文件的MIME类型.如果它返回类型为'application/pdf',那么它应该是PDF.

文件信息功能是在PHP 5.3中添加的,但在此之前,您可以使用mime_content_type函数.

  • 但是如果我有一个 php 文件并写入(标题:type =“application / pdf”)......它也会向我显示相同的 (2认同)
  • 应该注意的是(如[在其他地方提到的](/sf/answers/2777339071/))`mime_content_type()`函数[未被弃用](http://php.net /manual/en/function.mime-content-type.php),并明确提到包含在PHP7中. (2认同)

HBv*_*Bv6 9

mime_content_type('file.ext');
Run Code Online (Sandbox Code Playgroud)

mime_content_type()

  • 但请注意它[已弃用](http://php.net/manual/en/function.mime-content-type.php). (4认同)
  • @PeeHaa您可以更新您的回复吗?尚未弃用。(请参阅链接。)也许它可以恢复生命? (2认同)

Mik*_*ike 8

通过打开文件并读取前几个字节的数据来查找PDF 幻数.大多数文件都有特定格式,PDF文件以%PDF开头.

您可以检查文件的前5个字符,如果它们等于"%PDF-",则它可能是真正的PDF(但是,这并不能明确证明它是PDF文件,因为任何文件都可以从这5个字符开始).正确PDF文件中的后4个字符包含版本号(即1.2).

  • 好点,它本质上是一个mime类型检查可能已经在做什么.但是,如果您确实想要更加确定它是一个有效的PDF文件(并且您不介意额外的处理时间),您可以扫描该文件以寻找其他预期的构造,例如PDF"%% EOF"标记文件的结尾.(假设这比mime检查更多) (2认同)