PHP 7 Mime 和 PDF 验证

Posted

技术标签:

【中文标题】PHP 7 Mime 和 PDF 验证【英文标题】:PHP 7 Mime and PDF validation 【发布时间】:2019-09-10 02:55:25 【问题描述】:

这在 php 5 中有效,但现在不是:

if (function_exists('finfo_open')) 
  $mime = finfo_open(FILEINFO_MIME_TYPE);
  $mime_type = finfo_file($mime, "FILE-PATH");
  if($mime_type == array("application/pdf", "image/jpeg", "image/png"))
    echo "file is pdf";
  else
    echo "file is not pdf";
  finfo_close($mime);

【问题讨论】:

里面有问题吗?检查php.net/manual/en/function.mime-content-type.php @Jax297 - 我的问题是为什么现在不行?哪些方面需要改变?您的链接已有七年历史了。 if( in_array($mime_type, array("application/pdf", "image/jpeg", "image/png"))) echo "文件是 pdf"; else echo "文件不是 pdf"; @Jax297 - 仍然得到“文件不是 pdf”。 【参考方案1】:

您将字符串与数组进行了比较,这是正确的代码:

if (function_exists('finfo_open')) 
  $mime = finfo_open(FILEINFO_MIME_TYPE);
  if (in_array(finfo_file($mime, 'FILE-PATH'), array('application/pdf', 'image/jpeg', 'image/png')))
    echo 'file is pdf';
  else
    echo 'file is not pdf';
  finfo_close($mime);

【讨论】:

我不断收到“文件不是 pdf”。是什么赋予了? mime 命名法最近有变化吗? 刚刚在 PHP 7.2 和 Windows 10 上试过,对我有用。尝试 var_dump() finfo_file() 的结果。如果您使用的是 Linux,您还可以考虑查看您的 /etc/mime.types 降级到 5.6.4,现在它就像一个魅力。

以上是关于PHP 7 Mime 和 PDF 验证的主要内容,如果未能解决你的问题,请参考以下文章

php Laravel文件验证mime类型

覆盖 laravel 验证消息

在规则中使用 php 会话值进行自定义 jquery 验证

为啥 php 不能正确检测到 pdf mime 类型(wkhtmltopdf)?

如何在 PHP 中在浏览器中打开文件之前验证用户 IP? [关闭]

验证/测试 mime4j 解析内容的输出