<img src="uploads/<?php echo $_SESSION['username']; ?>.jpg" class="img-circle" width="60" <b class="hidden-xs">
我收到用户图片的链接为uploads/admin.jpg
或uploads/?php echo $_SESSION['username'];?>.jpg
。
如果他们上传了一个.png,我该如何获得它为图像选择正确的扩展名所以如果它是png而不是JPG它会加载png图像而不是JPG?有办法吗?
答案 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等)。这是我最不喜欢的解决方案。