【问题标题】:How to get uploaded image file format without using guessExtension()?如何在不使用guessExtension() 的情况下获取上传的图像文件格式?
【发布时间】:2026-01-07 04:20:08
【问题描述】:

我有一个在 PHP 5.3.28 上运行的 laravel 4.1 项目,我试图找到一种方法来从某个图像中获取文件扩展名,但每当我使用 guessExtension() 时都会失败:

$format = Input::file('image')->guessExtension();

我尝试上传的所有其他图片使用guessExtension() 都没有问题,但似乎 Symphony 无法识别此特定图片的mimeType

object(Symfony\Component\HttpFoundation\File\UploadedFile)[9]
  private 'test' => boolean false
  private 'originalName' => string 'herewithme.png' (length=14)
  private 'mimeType' => string 'application/octet-stream' (length=24)
  private 'size' => int 0
  private 'error' => int 1

我的应用程序失败并显示以下消息:

The file "" does not exist

我正在考虑做类似this:

   $filename = Input::file('image')->getClientOriginalName();

    if(strpos($filename, '.png') !== false)
    {
        $format = 'png';           
    }
    elseif(strpos($filename, '.jpg') !== false)
    {
        $format = 'jpg';            
    }

但是,我担心文件可能会因命名为pdf.png.jpg(或类似的名称)而导致问题,所以我对以这种方式获取文件格式犹豫不决。谁能想到更好的方法来做到这一点?

【问题讨论】:

  • 也许只是在上传的文件上调用 Linux/Unix file 命令?
  • 获取扩展名$ext = pathinfo($filename, PATHINFO_EXTENSION);,但这并不能解决您的问题。我不知道 Laravel 的内部结构,但有可能达到最大上传文件大小,在 php.ini 中设置,可能是这个原因。同样在您的 var_dump 中有 private 'error' => int 1 您可以在该类对象上获得错误消息或类似内容

标签: php symfony laravel laravel-4


【解决方案1】:

你可以用 substr 来做。

You can try $ext = substr($filename,-4);

【讨论】:

  • 我宁愿使用 explode() 并用 '.' 分隔,以获得更通用和故障安全的解决方案。
  • 是的,我们可以。我同意它比我的更好。它适用于所有人。
【解决方案2】:

不妨试试:

Input::file('image')->getClientMimeType();

Input::file('image')->getMimeType();

【讨论】:

    最近更新 更多