有没有办法在链接中获取多个Image Extensions?

时间:2017-06-09 00:03:47

标签: php

<img src="uploads/<?php echo $_SESSION['username']; ?>.jpg" class="img-circle" width="60" <b class="hidden-xs">

我收到用户图片的链接为uploads/admin.jpguploads/?php echo $_SESSION['username'];?>.jpg

如果他们上传了一个.png,我该如何获得它为图像选择正确的扩展名所以如果它是png而不是JPG它会加载png图像而不是JPG?有办法吗?

2 个答案:

答案 0 :(得分:0)

if (file_exists('http://www.example.com/upload/'.$_SESSION['username'].'jpg')) 
{ 
    $src = $_SESSION['username'].'jpg';
}
else 
{ 
    $src = $_SESSION['username'].'png'; 
}

<img src="<?php echo $src; ?>" class="img-circle" width="60" <b class="hidden-xs">

答案 1 :(得分:0)

你有选择。

1)您可以预先处理上传到您的图像(可能使用ImageMagick),以便在将文件保存到服务器之前强制它们使用您想要的格式。这可能是最好的解决方案。

2)您可以接受上传文件的名称并将其存储在数据库中。因此,而不是:

"uploads/<?php echo $_SESSION['username']; ?>.jpg"

你会使用类似的东西:

"uploads/<?php echo $_SESSION['userimagefilename']; ?>"

此解决方案的问题是信任。用户可能不会向您发送诚实代表文件内容的文件名。

3)另一种解决方案是使用exif_imagetype()。这接受一个图像,查看文件内容,并告诉你图像类型是什么(或者不是,在恶意用户的情况下)。结合image_type_to_mime_type(),您可以将图像作为内联HTML图像流式传输,并忘记后缀是什么。如果您将图像存储在数据库而不是磁盘上的文件中,这尤其方便,这在您尝试存储大量图像时会出现问题。

4)最后的解决方案是if-then然后通过一堆file_exists()语句。但是,您需要检查至少三个并且应该测试十几种文件格式。这是每张图片1-12次磁盘点击。这是一个昂贵的解决方案,但仍然无法保护您免受上传文件的人的影响,该文件不是假装的文件或上传不可渲染为图像的文件(例如.PDF,.DOC,.RTF等)。这是我最不喜欢的解决方案。