如何在不使用guessExtension()的情况下获得上传的图像文件格式


How to get uploaded image file format without using guessExtension()?

我有一个在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

我想做这样的事情:

   $filename = Input::file('image')->getClientOriginalName();
    if(strpos($filename, '.png') !== false)
    {
        $format = 'png';           
    }
    elseif(strpos($filename, '.jpg') !== false)
    {
        $format = 'jpg';            
    }

然而,我担心一个文件可能会因为被命名为pdf.png.jpg(或类似的东西)而引起问题,所以我对以这种方式获取文件格式感到犹豫。有人能想出更好的方法吗?

您可以使用substr来完成。

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

也许可以试试:

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

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