如何获取没有扩展名的文件的扩展名?

3

我有一些图片存储在目录:c:/images/,例如:

  • 1.jpg
  • 1.png
  • 2.gif
  • 3.jpg

我只知道图片的名称没有扩展名,我知道有些图片存在于c:/images/中,名称为:1, 2, 3, ...,但是我不知道它们的扩展名。

如何获取没有扩展名的文件的扩展名呢?

我尝试使用以下方法:

var_dump(pathinfo ('c:/images/1'));

但这只返回以下内容:
array(3) { ["dirname"]=> string(3) "c:\images\" ["basename"]=> string(1) "1" ["filename"]=> string(1) "1" } 

我原本以为这个文件名是1.jpg,但实际上是1 -> c:/images/1 ?! - Rizier123
我不知道文件的扩展名,我只知道文件名。 - mhkyazd
啊,那么你的文件预期结果会是什么?.jpg.png格式的? - Rizier123
2
你找不到扩展名。唯一的方法是分析二进制文件数据,如果你知道它们是图片的话。但这是非常困难的任务,因为有很多种图像类型。在更多的情况下,图像类型编码到二进制文件体中,但无论如何这都是一个艰巨的任务。 - Kancho Iliev
如果你的例子中有1.jpg1.png,它应该会给你什么?很可能你需要使用类似于glob的东西- glob('C:\Images\1.*'); - ceejayoz
2个回答

1

getimagesize() 除了其他信息外,还返回图像的MIME类型。因此,请使用

var_dump(getimagesize('c:/images/1'));

你将在数组元素mime中得到MIME类型。例如:image/jpegimage/png

还有更快速的函数exif_imagetype(),但此函数仅返回MIME类型的整数。可以在PHP手册中找到将可能的返回值与图像类型匹配的表。


对于1.jpg和1.png,如何使用getimagesize('c:/images/1') - mhkyazd
1
无法打开流:在中没有此文件或目录。 - mhkyazd
如何获取没有扩展名的文件的扩展名? - mhkyazd
如果你收到了“failed to open stream: No such file or directory in”的错误提示,那么这个文件不存在。很可能是你的代码出现了错误。至于你的另一个问题:文件没有“扩展名”,它们有一个MIME类型,而扩展名可以帮助一些操作系统找到正确的MIME类型。如果getimagesize()返回的数组中的mime元素是image/jpeg,那么扩展名应该是.jpg - Reeno
希望那个给我点踩的人能够解释一下为什么。 - Reeno
显示剩余2条评论

0
如果您有文件路径,finfo_file() 可以返回该文件的 MIME 类型:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
var_dump(finfo_file($finfo, '/var/www/favicon.ico'));

将打印:

string(12) "image/x-icon"

在Web上,扩展名并不重要。浏览器和(Web)服务器并不真正使用它们。它们查看MIME类型。浏览器将检测名为image.png的JPEG文件作为JPEG。


1
你可以尝试使用 var_dump(finfo_file($finfo, '/var/www/favicon')); 这段代码来查看错误。 - mhkyazd
如何获取没有扩展名的文件的扩展名? - mhkyazd
@mhkyazd,你无法获取没有扩展名的文件的扩展名...显然。你收到了什么错误?将路径更改为您的路径。 - Rudie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接