2010-10-12 100 views
0

我想知道是否有办法找出给定的字符串是否是一个图像,例如PHP获得内容类型

$a = 'php';// output false 
$b = 'jpg';// output true 
$c = 'js'; // output false 
$d = 'png';// output : true 

我知道这可以通过检查数组来完成,但我只是想知道是否有更好的解决方案。

+3

你在这里混合了几件事情。在您的标题中,您正在讨论“内容类型”,但没有内容。然后你想知道给定的字符串是否是一个图像(这是可能的),但是,然后你切换到文件扩展名:)你能澄清你有什么,以及你想找出什么? – 2010-10-12 21:25:53

+0

也许mime类型会是一个更好的描述,我只是试图尽可能好地描述它。 – Val 2010-10-12 21:42:30

回答

3

我发现这个:http://www.php.net/manual/en/function.finfo-file.php

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
foreach (glob("*") as $filename) { 
    if substr(finfo_file($finfo, $filename), 0, 6) == "image" 
     printf("%s is an image file.", $filename); 
} 
finfo_close($finfo); 
?> 

此外,就像Pekka的评论所说,你在混淆你的标题和你的问题。如果你想找出一个特定文件的内容类型,你可以使用我提供的代码片段。

否则,它只是听起来像你想看看一个文件的扩展名是否表明它是一个图像。然后,你会只想在预先定义的扩展的阵列来测试字符串的存在:

<?php 

$imageExtensions = array('jpg', 'gif', 'png', ....); 
$someFileExtension = 'jpg'; 

if in_array($someFileExtension, $imageExtensions) 
    printf("%s is an extension indicative of an image file.", $someFileExtension); 

?> 
+0

事实是要么工作......我知道第二个选项......这是我应该去那个,因为它可能比'finfo'选项更快(需要将它安装为php扩展名) 。 – Val 2010-10-12 21:40:19

+1

@Val为了从用户上传中识别文件的类型,您应该_always_检查MIME类型。在这种情况下检查文件扩展名是一个安全问题,并且不可靠。 – MrWhite 2010-10-12 21:48:45