【问题标题】:Check if file is image or pdf检查文件是图像还是pdf
【发布时间】:2019-02-09 11:44:00
【问题描述】:

我需要在 php/laravel 中检查文件是图片还是 pdf。

这就是我现在拥有的:

return $file['content-type'] == 'image/*';

除了 'image/*' 我还需要添加 'application/pdf'

如何添加?

更新

为了更清楚,有没有一种方法可以添加更多允许的类型而无需执行 OR 条件。我现在用 in_array 得到了答案!

【问题讨论】:

  • 你是问如何在php中添加OR条件??
  • 但请注意,$file['content-type'] 可以伪造
  • 我个人会远离任何框架,直到我了解该语言的基础知识..
  • @Devon 感谢您的帮助和鼓励!
  • @Olof “你会如何检查它?”。这就是重点,你真的做不到。上传文件时,您会从客户端获得一个值。客户端可以将值设置为任何它想要的值。您可以与文件扩展名进行交叉检查......但是文件扩展名也可以设置为任何内容,而不管文件的实际内容如何。真正分辨的唯一方法是尝试使用一些旨在读取 PDF 文件的软件/库来读取文件,并查看它是否可以从中读取。图像也一样。但这需要 CPU 和 I/O 时间。取决于你想用这个值做什么,你关心多少。

标签: php laravel


【解决方案1】:

我喜欢这种方法,它可以节省一些打字时间

return (in_array($file['content-type'], ['image/jpg', 'application/pdf']));

【讨论】:

  • @Lawrence 感谢您的编辑,与大多数 PHP 函数一样,我忘记了参数顺序 :)
  • 这正是我想要的!
【解决方案2】:

您可以使用 OR 条件检查文件的内容类型以添加​​额外的检查条件。

return ($file['content-type'] == 'image/*' || $file['content-type'] == 'application/pdf')

但最好将所有条件值放入数组中并使用in_array 检查它们是否存在。

return (in_array(['image/jpg', 'application/pdf'], $file['content-type']));

【讨论】:

    【解决方案3】:

    您可以简单地使用 OR 语句,即

    return ($file['content-type'] == 'image/*' || $file['content-type'] == 'application/pdf');
    

    这是假设您仍然只想返回真/假。这样调用者就会知道该文件是 PDF 还是图像。

    或者你的意思是 return 语句必须产生一个区分这两种类型的值?不清楚。

    如果是后者,你可能想要更多类似的东西

    $type = null;
    switch ($file['content-type']) {
      case "image/*":
        $type = "image";
        break;
      case "application/pdf":
        $type = "pdf";
        break;
    }
    return $type;
    

    【讨论】:

      【解决方案4】:
      return $file['content-type'] == 'image/*' || return $file['content-type'] == 'application/pdf';
      

      “||”意思或

      【讨论】:

        猜你喜欢
        • 2013-07-11
        • 2016-01-03
        • 2013-11-17
        • 1970-01-01
        • 2023-03-07
        • 2015-06-09
        • 2014-08-31
        • 2011-02-13
        相关资源
        最近更新 更多