如何获取具有已知文件名而不是扩展名的图像文件的扩展名

时间:2013-06-06 07:22:39

标签: php image

我有一个简单的上传图片功能,用户可以选择要为个人资料图片上传的图像。图像功能允许每种类型的图像。用户上传图像文件后,它将保存在我指定的目录中的公共文件夹中,其名称将更改为此类文件。

if the userId = 32
then the image will be stored as 32.ext

其中“ext”是图片的扩展名。

我的问题是在用户完成上传并检索图片页面时检索图片。我只能做一种类型的文件类型,例如jpg not png或任何扩展名。

<img src="<?php echo "/public/images/event/".$userDetails->id.".jpg";?>" />

我的问题是如何检查扩展程序,并根据扩展程序显示它本身。 假设用户上传了一个png文件,输出将是32.png,但是现在我正在将文件扩展名硬编码为jpg。

5 个答案:

答案 0 :(得分:0)

您可以在php中找到文件扩展名:

$file_parts = pathinfo($filename);

$file_extension = $file_parts['extension'];

或者,如果您不知道扩展名,则可以执行以下操作:

$dirname  = "./somedir/"; 
$filename = "myfile"; 
$iterator = new RegexIterator(new DirectoryIterator($dirname), '/^' . preg_quote($filename) . '\.[^.]+$/iD'); 

// Any matching files? 
if (iterator_count($iterator) > 0) { 
    echo "Matches found:\n"; 
} else { 
    echo "No matches found.\n"; 
} 

// Get extensions of matching files 
foreach ($iterator as $fileinfo) { 
    printf("%s -> %s\n", $fileinfo, pathinfo($fileinfo, PATHINFO_EXTENSION)); 
}

http://www.sitepoint.com/forums/showthread.php?631513-possible-check-if-file-filename-exists-w-o-knowing-its-extension

答案 1 :(得分:0)

您必须以JPEG格式转换所有类型的图像。

请查看此链接How to convert all images to JPG format in PHP?

答案 2 :(得分:0)

您可以在服务器端使用$ _FILES或pathinfo()

$extension = $_FILES["file"]["type"]; 

$extension = pathinfo($filename, PATHINFO_EXTENSION);

答案 3 :(得分:0)

<?php

$directory_path="/public/images/event/";

$matches = glob($directory_path.$userDetails->id.".*");

//assuming there is only one user id expect only one file in the array 
$image_file=$matches[0];

$extension=pathinfo($image_file, PATHINFO_EXTENSION);
echo "<img src='".$directory_path.$userDetails->id.$extension."' />";

答案 4 :(得分:0)

您手头有几种解决方案。

  1. 将每张图片转换为您支持的格式,即使它似乎已经采用该格式。这具有增加安全性的好处,因为转换有望不受图像内部恶意负载的影响,但只能转换或复制像素信息,否则会创建一个全新的图像。

  2. 忽略提供用户上传内容的安全隐患,您还可以在上传文件时使用getimagesize()获取文件类型,并将检测到的文件类型存储在数据库中,以及将此信息用于文件扩展名本身。请注意,即使服务器认为扩展名为“.gif”且mime类型为“image / png”,浏览器也可能实现了将JPG视为JPG的回退机制。用户可以并且将无法使用与真实内容匹配的正确扩展名上传图像。期待获得各种奇怪的格式。

  3. 您还可以更改完全了解图像名称的方式。只需将其存储在数据库中 - 这只比仅存储扩展名略多。但是,您不能仅仅通过知道用户ID来创建图像名称。

  4. 网址中不需要扩展名。浏览器的唯一要求是应该有一个与内容匹配的mimetype。但是实现了自动检测,即使使用了错误的mimetype,您最终也可能会显示图像,但是Apache Web服务器可能会实现mime-magic检测,并且会为每个提供的图像发送正确的mimetype而不需要文件扩展名。