【问题标题】:PHP: Check is file upload is a valid PDF filePHP:检查文件上传是否是有效的PDF文件
【发布时间】:2018-06-11 12:10:32
【问题描述】:

我想用 PHP 验证用户提交的文件是否是有效的 PDF 文件。 但是我有这个限制:

  1. PHP 5.0.4。
  2. 我无法使用 mime_content_typefinfo_open
  3. 我遇到了 shell_exec(文件命令)的问题。所以,再次,我不能使用它。

我唯一需要知道的是文件是否实际上是 PDF。 ¿ 我可以使用什么较低级别的解决方案?就像阅读前 x 个字符并寻找 %PDF 或类似的东西。

提前致谢。

【问题讨论】:

  • PHP 5.0.4 13岁以上,支持5.0分支ended in 2005 with 5.0.5。希望这不是公共互联网上的应用程序
  • 如果您可以按照您的建议使用fopen 所有PDF 文件以%PDF- 开头。你有什么理由不能这样做?
  • 我认识卡斯滕·库普。告诉我的老板。
  • @apokryfos 不,我会的。我想知道还有哪些其他选择。

标签: php pdf mime-types


【解决方案1】:

你是有限的,但是你可以在使用$_FILES提交表单后在后端做一些事情,它来自一个使用输入类型=“文件”提交的表单:

$_FILES['form_name_for_input_type_equals_file']['name'] ---> check if extension here is .pdf
$_FILES['form_name_for_input_type_equals_file']['type'] ---> check if mime type here is application/pdf

有关$_FILES的更多信息,请单击here

【讨论】:

  • 谢谢,但我不相信这些验证。用户可以重命名可执行文件(将扩展名更改为 .pdf)并绕过验证。 mime 类型也可能发生类似的情况。
  • 正如我所说,你的能力有限
【解决方案2】:

试试这个

$allowed =  array('pdf');
$filename = $_FILES['document_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!in_array($ext,$allowed) ) {
    echo 'Please, only upload PDF files';
}

您还可以做的是让 PHP 调用 BASH 脚本以确认它是否是操作系统的 pdf,我不建议您这样做,但它的级别尽可能低。您还可以在 bash 或 PHP 中使用正则表达式来检查文件头是否与 PDF 的文件头匹配。

【讨论】:

    【解决方案3】:

    试试看: 它对我有用:

    $file_type = $_FILES['filename']['type'];
    if($file_type=='application/pdf'){
        // is pdf
    }else{
       // not pdf
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 1970-01-01
      • 2013-07-18
      • 2017-06-11
      • 1970-01-01
      • 2015-11-15
      • 2020-02-10
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多