使用 PHP 确定本地文件的 Mime 类型(内容类型)

2024-01-15

我正在尝试确定文件的 mime 类型。我尝试了几种方法,但没有想出任何可以提供一致输出的方法。我试过了$mime = mime_content_type($file) and $mime = exec('file -bi ' . $file)。我正在提供图像、CSS 和 JavaScript。

Example mime_content_type() output:

  • jquery.min.js - 文本/纯文本
  • editor.js - 文本/纯文本
  • admin.css - 文本/纯文本
  • controls.css - 应用程序/x-troff
  • logo.png - 文本/纯文本

Example exec(...) output:

  • jquery.min.js - 文本/纯文本;字符集=us-ascii
  • editor.js - 文本/x-c++;字符集=us-ascii
  • admin.css - 文本/x-c;字符集=us-ascii
  • controls.css - 文本/x-c;字符集=us-ascii
  • 徽标.png - 图像/png

从这里可以看出,结果到处都是。

我的PHP版本是5.2.6


SOLUTION(感谢雅各布)

$mimetypes = array(
    'gif' => 'image/gif',
    'png' => 'image/png',
    'jpg' => 'image/jpg',
    'css' => 'text/css',
    'js' => 'text/javascript',
);
$path_parts = pathinfo($file);
if (array_key_exists($path_parts['extension'], $mimetypes)) {
    $mime = $mimetypes[$path_parts['extension']];
} else {
    $mime = 'application/octet-stream';
}

The Fileinfo http://www.php.net/manual/en/book.fileinfo.php如果您的版本 >= 5.30,则扩展将完成这项工作

  • 您应该尽量避免执行命令
  • mime_content_type在 PHP 5.30 中已弃用

如果不幸的是你的版本

这是一个例子:

<?php
$filename = 'FILENAME HERE';
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css',
    'js' => 'application/x-javascript'
    // any other extensions that you may be serving      
);

$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename)));
if(array_key_exists($ext, $mimetypes)) {
    $mime = $mimetypes[$ext];
} else {
    echo 'mime type not found';
}

?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP 确定本地文件的 Mime 类型(内容类型) 的相关文章

  • PHP7.1上读取会话数据失败

    分享一个我遇到的问题 现已解决 在我的开发机器上 我使用 PHP 运行 IIS 我升级到 PHP7 突然我的代码不再工作 返回此错误 session start 读取会话数据失败 用户 路径 C WINDOWS temp 看起来像是权限问题
  • 动态重新定义 PHP 类函数?

    我试图弄清楚如何动态导入大量 PHP 类函数 例如 class Entity public function construct type require once type functions php person new Entity
  • 在 JAX-WS 中使用安全性的最佳实践是什么

    这是场景 我有一些需要保护的 Web 服务 JAX WS 目前 为了身份验证需求 我提供了额外的 SecurityWService 它为授权用户提供了一些需要在请求其他服务时描述的 userid 和 sessionid 使用一些java安全
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • 将 int 转换为 float/double [重复]

    这个问题在这里已经有答案了 当我想要转换时遇到了麻烦integer价值观float 带点的数字 a 7200 b a 3600 echo b 2 b floatval b echo b 2 但它应该回响2 0 or 2 00 我也尝试过se
  • 测试 CodeIgniter 会话变量的正确方法是什么?

    获取以下代码片段 测试确保会话变量不为空的最佳方法是什么 如果稍后在我的脚本中 我调用以下内容 第一个打印正确 但在第二个我收到消息 未定义的变量 已登录 我尝试过使用 empty and isset 但两者均未成功 我还尝试使用向后执行
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • 根据product_id获取magento产品的浏览次数

    我想在 Magento 的类别列表页面上显示查看计数 这些数据看起来过去可以通过 reports product collection 访问 但我找不到正确访问它的方法 我基本上想提供一个产品 ID 并获取返回给我的所述产品的观看次数 您可
  • 通过 PEAR 安装 PHPUnit

    我安装时遇到问题PHPUnit 3 4 6 via 梨1 9 0 当我发现频道后pear phpunit de并尝试使用以下命令之一 pear 安装 phpunit PHPUnit pear 安装 alldeps phpunit PHPUn
  • WordPress 子主题 -functions.php 复制 - 无法“重新声明”

    我正在使用带有儿童主题 starkers child 的 Starkers 我需要编辑functions php来声明一个菜单 所以我复制了functions php JS文件夹和external文件夹 它们都在functions文件中的某
  • Symfony 4 生产模式错误处理页面内存耗尽

    我将我的项目设置为prod模式在 env除了自定义错误页面之外的所有内容似乎都有效 我将此作为我的 404 树枝模板 templates bundles TwigBundle Exception error404 html twig inc
  • 如何获取 tokio-io 的 async_read 文件句柄

    我想从文件句柄中流式传输行 但我不知道如何满足File has async read use std fs File use std io BufReader BufRead use tokio core reactor Handle us
  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 即使在双引号内或使用 PHP_EOL,PHP echo 也不打印换行符

    这是一张照片剪辑 我认为它很清楚 这真让我抓狂 我似乎无法让 php 在我的本地主机 使用 xampp 或在线 PHP 解释器上打印换行符 如果你想在 php 中使用 HTML 标签 试试这个 echo dkljaks aalksja kl
  • Laravel 5 命名约定

    我对 Laravel 约定有点困惑 因为我是这个框架的新手 我正在关注 Jeffrey Way 他使用的 Laracasts 视频Plural对于控制器名称 E g 页面控制器 卡片控制器 帖子控制器 但如果我参考官方文档Laravel g
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • 为什么 0.5 mod 0.1 在不同的编程语言中结果不同?

    我有一个关于模数的问题 模运算求一个数除以另一个数的余数 我原本期望 0 5 0 1 0 的结果 但是当我在 PHP 或 net 中运行它时 我得到 0 1 我运行的 php 代码是 var dump fmod 0 5 0 1 在 net中
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa

随机推荐

  • C# 在哪里添加方法

    我对 C 很陌生 一天前才开始 我必须做一个简单的 C 数据库 其中包含音乐专辑等 我遇到的问题是我无法调用我刚刚执行的方法 任何人都可以帮助我在 main 中包含这个方法吗 void addnew int ID currid string
  • 将 JavaScript NodeList 转换为数组的最快方法?

    之前在这里回答过的问题说这是最快的方法 nl is a NodeList var arr Array prototype slice call nl 在我的浏览器上进行基准测试时 我发现它比这个慢 3 倍以上 var arr for var
  • Ant4Eclipse 示例

    我目前正在使用标准 Ant 我想转移到 Ant4Eclipse http www ant4eclipse org 以利用我的 eclipse 项目已经拥有的类路径信息来构建它并运行单元测试 我发现的问题是我找不到使用 ant4eclipse
  • CSV 更改分隔符

    我正在读取 CSV 文件并将分隔符从 更改为 但是 我在我的数据 我无法控制 中注意到 在某些情况下 我有一些数据不想遵循此规则 并且它包含带有逗号的引用数据 我想知道如何最好地不替换这些异常 例如 ABSON TE Wick Lane A
  • 使用 MAMP 在 Mac OS 中通过终端连接到 MYSQLi

    我正在尝试通过 Mac 中的终端运行我的 PHP 脚本 当我尝试运行该脚本时 出现以下错误 警告 mysqli connect HY000 2002 没有这样的文件或目录 这就是我尝试连接的方式 mysqli connect localho
  • 使用 docker-composer 进行扩展并向主机名添加数字?

    我有一个docker compose yml master build slave image master hostname slave command run slave 我怎样才能使docker compose scale slave
  • 更新后反应输入光标移动到末尾

    当我更新输入字段中的值时 光标移动到字段的末尾 但我希望它保持在原来的位置 什么可能导致此问题
  • 使用WEKA时找出错误分类的实例

    我正在使用 WEKA 的 GUI 版本 并使用朴素贝叶斯进行分类 谁能告诉我如何找出哪些实例被错误分类 转到 Weka 资源管理器中的分类选项卡 单击更多选项 检查输出预测 Click OK 希望有帮助
  • 如何在 uitextfield 中显示 pickerview 而不是键盘?

    我想在成为 UITextfield 而不是键盘的 FirstResponder 时显示 UIPickerView 并在选择器视图的文本字段中填充值 有人知道吗 使用 textfield InputView uipickerView 替换系统
  • SmtpClient“由于数据包格式意外,握手失败”

    我使用 SmtpClient 发送电子邮件 代码如下 SmtpClient client new SmtpClient host 587 client EnableSsl true client Credentials new System
  • 如何从一个Windows控制台应用程序向另一个应用程序发送消息?

    我有一个启动子进程的 Windows 控制台应用程序 如何向子进程发送消息 我发现类似的功能PostMessage PeekMessage http msdn microsoft com en us library windows desk
  • Java 中缺失值

    Java中可以用什么语句来表示变量的缺失值 比如我想写一段代码 if a gt 23 income pay rate else income is missing 这个线程中有很多不好的建议 首先让我谈谈为什么你应该not采取一些建议的方法
  • 将 Golang JSON 存储到 Postgresql 中

    我想将某个结构存储到我的数据库中 其中有一个 JSON 字段 type Comp struct CompId int64 db comp id json comp id StartDate time Time db start date j
  • stack.yaml 文件和 .cabal 文件有何区别?

    我最近开始在为项目指定外部依赖项时使用 Haskell 堆栈 有时您将其放置在 cabal 文件中 而有时您将其放置在 yaml 文件中 我是否正确地认为 当您将其放入 cabal 文件中时 它只会在堆栈存储库中查找您的包 但是 当您将其放
  • Android SDK Manager 安装特定版本的 NDK Bundle

    我正在尝试安装 NDK 15c 但我似乎不知道如何告诉 sdkmanager 版本 如果我跑 sdkmanager ndk bundle 我会得到我不想要的最新的 我尝试了不同的组合 但没有任何效果 sdkmanager ndk bundl
  • Akka actor 查找或依赖注入

    我刚刚开始使用 Akka 我无法决定是否应该使用依赖注入 如蛋糕模式 或 actor 查找来将 actor 彼此解耦 首选方法是什么 您应该更喜欢向彼此介绍 Actor 这意味着在消息中发送 ActorRef 或与消息一起发送 或者将其传递
  • CouchDB 中的树

    我是 CouchDB 新手 有一个问题 我正在使用父消息的 ID 作为属性来保存消息 消息还可以有一个 childMessage 作为父级 因此它看起来像一棵树 我如何查询所有孩子 包括孩子的孩子 谢谢 这是处理分层数据时常用的方法 htt
  • Rails 如何优化我的网站?

    我想让我的网站更快 我知道我可以制作 CSS 精灵并压缩 HTML 和 CSS 还有其他方法可以优化页面速度吗 此页面就是一个示例 http www vinderhimlen dk konkurrencer vind elektronik
  • 如何防止 BeautifulSoup4 在汤中添加额外的 标签? [复制]

    这个问题在这里已经有答案了 在 BeautifulSoup 3 之前的版本中 我可以获取任何 HTML 块并通过以下方式获取字符串表示形式 from BeautifulSoup import BeautifulSoup soup3 Beau
  • 使用 PHP 确定本地文件的 Mime 类型(内容类型)

    我正在尝试确定文件的 mime 类型 我尝试了几种方法 但没有想出任何可以提供一致输出的方法 我试过了 mime mime content type file and mime exec file bi file 我正在提供图像 CSS 和