2010-07-05 84 views

回答

41
$ext = pathinfo('/testdir/dir2/image.gif', PATHINFO_EXTENSION); //$ext will be gif 

更新:我看到很多downvotes的。我的方法有什么问题?请告诉我。

+0

这是太过分了。 – RobertPitt 2010-07-05 12:12:41

+1

我有一个'hello.jpg',但我将它重命名为'hello.gif'并上传它,以便获得扩展名,但不是正确的类型。佩卡的问题是国际海事组织最好的一个 – DrColossos 2010-07-05 12:46:40

+2

原始问题只是要求找到扩展名。没有安全检查或其他需求。 – fabrik 2010-07-05 12:51:10

-2

基本字符串函数strrpos()substr()可以为您做到这一点。以及许多其他奇特的方式。

+0

这是一个问题的直接答案,其中OP可能需要的是彻底的文件类型检查,而不仅仅是扩展。按照你的逻辑,这应该是-1。只是说';) – 2010-07-05 12:09:56

+0

@皮卡“找到一个图像的扩展名”。听起来对我来说毫不含糊 – Robus 2010-07-05 12:13:42

+1

@Robus是的。我只是在嘲笑@Col,因为当明确的要求实际上不是OP真正需要达到最佳解决方案时,他已经低估了我对这种明确要求的直接答案。他的反馈总是有道理的(我非常重视@Col的知识和输入,PHP标签需要它),但他总是非常直接地关注它,这就是为什么当他犯同样的错误时我会变成一个鸡巴:)我想要指出的是,这个答案已经收到的downvote不是来自我,但。 – 2010-07-05 12:16:52

1

As Col. Shrapnel提到;有相当多的方式

$path = '/some/where/img.gif'; 
$path = explode('.',$path); 
$path = end($path); 
+0

谢谢,这段代码看起来很酷,但正如我上面所说的,我只是想使用一个直接的标准函数,如'pathinfo'。 – Siva 2010-07-06 04:56:55

14

它通常是更可取(不扩展,而是由它的内容),以检测实际图像类型。为此,请使用getimagesize()

+1

这应该是正确答案。名称的扩展可以是任何东西。 – Nishanthan 2014-06-29 07:51:05

0

我建议您通过GD/ImageMagick检查运行任何上传/链接的图像并重新保存,以防止图像中隐藏任何恶意代码。这也可以让你保存所有具有相同扩展名的图像,使你更容易。

http://www.php.net/imagepng
http://www.php.net/imagegif

+0

这是一个很好的建议,尽管它与问题无关。不值得赞赏。但是,将JPG转换为GIF,反之亦然永远不会产生好的结果。 – 2010-07-05 12:18:55

+1

谢谢。我知道这与问题并不完全相关,但我想如果他接受上传的图片,最好在发生不良事件之前吐出这些信息。您也可以首先检查扩展名,查看给定的结果是否存在于允许的扩展数组中,然后将其保存为与通过GD/ImageMagick检查完全相同的扩展名。如果找不到结果,也要保留默认值(比如说PNG)。 – eklundchristopher 2010-07-05 13:01:16

+0

谢谢,这是一个很好的建议。 – Siva 2010-07-06 05:19:30

5

我有问题,第一个答案和URL锚前。 google.com/image.jpg#anchor

更好的解决方案

$filename_from_url = parse_url($url); 
$ext = pathinfo($filename_from_url['path'], PATHINFO_EXTENSION); 
0

我建议你完美的方式

$file_path = '/some/where/img.gif'; 
$info = new SplFileInfo($file_path); 
$file_extension = $info->getExtension(); 
var_dump($file_extension); 

这里更详细The SplFileInfo class

我希望这会帮助你。

干杯!

Mudassar阿里

1

我认为最正确的方法是使用回声exif_imagetype功能:

exif_imagetype("/testdir/dir2/image.gif"); 

    function get_image_type($image_path){ 

     $extension = array(IMAGETYPE_GIF => "gif", 
     IMAGETYPE_JPEG => "jpeg", 
     IMAGETYPE_PNG => "png", 
     IMAGETYPE_SWF => "swf", 
     IMAGETYPE_PSD => "psd", 
     IMAGETYPE_BMP => "bmp", 
     IMAGETYPE_TIFF_II => "tiff", 
     IMAGETYPE_TIFF_MM => "tiff", 
     IMAGETYPE_JPC => "jpc", 
     IMAGETYPE_JP2 => "jp2", 
     IMAGETYPE_JPX => "jpx", 
     IMAGETYPE_JB2 => "jb2", 
     IMAGETYPE_SWC => "swc", 
     IMAGETYPE_IFF => "iff", 
     IMAGETYPE_WBMP => "wbmp", 
     IMAGETYPE_XBM => "xbm", 
     IMAGETYPE_ICO => "ico"); 

     return $extension[exif_imagetype($image_path)]; 
} 
+0

即使该网址用于对服务器上的图像进行编码,这种方式也能正常工作 - 干得好。 – pgee70 2017-03-18 06:19:36

0

我想用最简单的方式strrpos()substr()方法

$path = "/testdir/dir2/image.gif"; 
$ext = substr($path, strrpos($path, '.')+1); 
echo $ext; // output will be gif 

更多的答案为Another Question与此相关问题

相关问题