【问题标题】:How to get a file extension from a file name without extension?如何从没有扩展名的文件名中获取文件扩展名?
【发布时间】:2014-07-05 03:41:37
【问题描述】:

PHP:我正在将图像文件上传到具有特定格式名称的文件夹中,例如 postid_posttype_postserial.ext,因此在显示特定博客文章时,我将根据文章 ID 和文章类型使用此格式。但这里的问题是我没有该文件的扩展名。所以这是一个实际的问题,我如何获得我只知道名称(在 name.ext 中)而不是扩展名的文件的扩展名。

仅供参考,我搜索了这个,发现很少有返回扩展名的函数,但您必须传递带有扩展名的完整文件名才能获取有关文件的信息。

【问题讨论】:

标签: php file-extension fileinfo


【解决方案1】:

在您的情况下,您需要获取文件的 mime 类型,然后在 PHP 中执行 switch 语句。您可以通过以下方式获取文件的 mime 类型:

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$mime_type = finfo_file($finfo, $postid_posttype_postserial_file);
finfo_close($finfo);

$mime_types = array(
    'image/gif' => '.gif',
    'image/jpeg' => '.jpg',
    // etc.
);

$ext = array_key_exists($mime_type, $mime_types) ? $mime_types[$mime_type] : false;
echo $ext;

了解更多:http://www.php.net/manual/en/function.finfo-file.php

更新2:正如评论所指出的,将switch替换为array匹配更优雅。

【讨论】:

  • switch/case 有点可笑。只需设置一个名为$mime_type_array 的数组,然后以$mime_type_array[$mime_type] 访问。也只需使用array_key_exists 来确保$mime_type 类型实际上在$mime_type_array 中,就像这样if (array_key_exists(mime_type, $mime_type_array)) { $ext = $mime_type_array[$mime_type] }
  • 另外,你可以让它更简单$ext = array_key_exists(mime_type, $mime_type_array) ? $mime_type_array[$mime_type] : null;。当然,请记住设置带有键和值的$mime_type_array
  • 是的,我们在编辑时使用了同样简单的代码。哈哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 2015-02-14
  • 1970-01-01
  • 2012-12-24
  • 2010-10-29
  • 1970-01-01
相关资源
最近更新 更多