在PHP中是否有任何标准函数只能从相应的文件路径中找到图像的扩展名?如何在PHP中找到路径中图片的扩展名?
例如,如果我的图像路径类似'/testdir/dir2/image.gif',那么函数应该返回'gif'。
感谢
在PHP中是否有任何标准函数只能从相应的文件路径中找到图像的扩展名?如何在PHP中找到路径中图片的扩展名?
例如,如果我的图像路径类似'/testdir/dir2/image.gif',那么函数应该返回'gif'。
感谢
$ext = pathinfo('/testdir/dir2/image.gif', PATHINFO_EXTENSION); //$ext will be gif
更新:我看到很多downvotes的。我的方法有什么问题?请告诉我。
基本字符串函数strrpos()
和substr()
可以为您做到这一点。以及许多其他奇特的方式。
这是一个问题的直接答案,其中OP可能需要的是彻底的文件类型检查,而不仅仅是扩展。按照你的逻辑,这应该是-1。只是说';) – 2010-07-05 12:09:56
@皮卡“找到一个图像的扩展名”。听起来对我来说毫不含糊 – Robus 2010-07-05 12:13:42
@Robus是的。我只是在嘲笑@Col,因为当明确的要求实际上不是OP真正需要达到最佳解决方案时,他已经低估了我对这种明确要求的直接答案。他的反馈总是有道理的(我非常重视@Col的知识和输入,PHP标签需要它),但他总是非常直接地关注它,这就是为什么当他犯同样的错误时我会变成一个鸡巴:)我想要指出的是,这个答案已经收到的downvote不是来自我,但。 – 2010-07-05 12:16:52
As Col. Shrapnel提到;有相当多的方式
$path = '/some/where/img.gif';
$path = explode('.',$path);
$path = end($path);
谢谢,这段代码看起来很酷,但正如我上面所说的,我只是想使用一个直接的标准函数,如'pathinfo'。 – Siva 2010-07-06 04:56:55
它通常是更可取(不扩展,而是由它的内容),以检测实际图像类型。为此,请使用getimagesize()
。
这应该是正确答案。名称的扩展可以是任何东西。 – Nishanthan 2014-06-29 07:51:05
我建议您通过GD/ImageMagick检查运行任何上传/链接的图像并重新保存,以防止图像中隐藏任何恶意代码。这也可以让你保存所有具有相同扩展名的图像,使你更容易。
这是一个很好的建议,尽管它与问题无关。不值得赞赏。但是,将JPG转换为GIF,反之亦然永远不会产生好的结果。 – 2010-07-05 12:18:55
谢谢。我知道这与问题并不完全相关,但我想如果他接受上传的图片,最好在发生不良事件之前吐出这些信息。您也可以首先检查扩展名,查看给定的结果是否存在于允许的扩展数组中,然后将其保存为与通过GD/ImageMagick检查完全相同的扩展名。如果找不到结果,也要保留默认值(比如说PNG)。 – eklundchristopher 2010-07-05 13:01:16
谢谢,这是一个很好的建议。 – Siva 2010-07-06 05:19:30
我有问题,第一个答案和URL锚前。 google.com/image.jpg#anchor
更好的解决方案
$filename_from_url = parse_url($url);
$ext = pathinfo($filename_from_url['path'], PATHINFO_EXTENSION);
我建议你完美的方式
$file_path = '/some/where/img.gif';
$info = new SplFileInfo($file_path);
$file_extension = $info->getExtension();
var_dump($file_extension);
我希望这会帮助你。
干杯!
Mudassar阿里
我认为最正确的方法是使用回声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)];
}
即使该网址用于对服务器上的图像进行编码,这种方式也能正常工作 - 干得好。 – pgee70 2017-03-18 06:19:36
我想用最简单的方式strrpos()
和substr()
方法
$path = "/testdir/dir2/image.gif";
$ext = substr($path, strrpos($path, '.')+1);
echo $ext; // output will be gif
更多的答案为Another Question与此相关问题
这是太过分了。 – RobertPitt 2010-07-05 12:12:41
我有一个'hello.jpg',但我将它重命名为'hello.gif'并上传它,以便获得扩展名,但不是正确的类型。佩卡的问题是国际海事组织最好的一个 – DrColossos 2010-07-05 12:46:40
原始问题只是要求找到扩展名。没有安全检查或其他需求。 – fabrik 2010-07-05 12:51:10