mod_mime_magic
描述: | 通过查看其内容的几个字节来确定文件的 MIME 类型 |
状态: | 延期 |
模块标识符: | mime_magic_module |
源文件: | mod_mime_magic.c |
摘要
该模块以与 Unix file(1)
命令相同的方式确定_f_ files:它查看文件的前几个字节。它旨在作为mod_mime无法解决的案件的“第二防线”。
该模块源自 Unix 的file(1)
命令的自由 version,它使用“magic numbers”和文件内容中的其他提示来确定内容是什么。仅当MimeMagicFile指令指定魔术文件时,此模块才有效。
魔术文件的格式
该文件的内容是 4-5 列中的纯 ASCII 文本。允许空白 lines 但忽略。注释 lines 使用哈希标记(#
)。其余的 lines 被解析为以下列:
柱 | 描述 |
1 | 从 “ > ”开始检查的字节数表示对先前非“> ”line 的依赖 |
2 | 数据的类型到 match byte 单个字符short machine-order 16-bit integer long machine-order 32-bit integer string arbitrary-length string date long integer date(秒因为 Unix 的 epoch/1970)beshort big-endian 16-bit integer belong big-endian 32-bit integer bedate big-endian 32-bit integer date leshort little-endian 16-bit integer lelong little-endian 32-bit integer ledate little-endian 32-bit integer date |
3 | match 的数据内容 |
4 | MIME 类型,如果匹配 |
5 | 匹配的 MIME 编码(可选) |
例如,以下魔术文件 lines 会识别某些音频格式:
# Sun/NeXT audio data 0 string .snd > 12 belong 1 audio/basic > 12 belong 2 audio/basic > 12 belong 3 audio/basic > 12 belong 4 audio/basic > 12 belong 5 audio/basic > 12 belong 6 audio/basic > 12 belong 7 audio/basic > 12 belong 23 audio/x-adpcm
或者这些将识别包含 Microsoft Word 或 FrameMaker 文档的*.doc
files 之间的区别。(这些是使用相同文件的不兼容文件格式 suffix.)
# Frame 0 string <MakerFile application/x-frame 0 string <MIFFile application/x-frame 0 string <MakerDictionary application/x-frame 0 string <MakerScreenFon application/x-frame 0 string <MML application/x-frame 0 string <Book application/x-frame 0 string <Maker application/x-frame # MS-Word 0 string 3760670043 application/msword 0 string 320317021340241261 application/msword 0 string 333245-000 application/msword
可选的 MIME 编码可以作为第五列包含在内。例如,这可以识别 gzip 压缩 files 并为它们设置编码。
# gzip (GNU zip, not to be confused with # [Info-ZIP/PKWARE] zip archiver) 0 string 037213 application/octet-stream x-gzip
性能问题
该模块不适用于所有系统。如果您的系统几乎没有跟上其负载或者您正在执行 web 服务器基准测试,那么您可能不希望启用此功能,因为处理不是免费的。
但是,我们努力改进原始file(1)
code 的 performance,使其适合繁忙的 web 服务器。它是为服务器设计的,有数千名用户发布自己的文档。这在内联网上可能非常常见。很多时候,如果服务器能够对文件的内容做出更明智的决定,那么有用的话就是文件 name 允许...even,如果只是为了减少“为什么我的页面无法工作”calls 当用户不正确 name 自己的 files 时。您必须确定额外的工作是否适合您的环境。
备注
以下注释适用于mod_mime_magic模块,并包含在此处是为了符合要求其确认的贡献者的版权限制。
mod_mime_magic:通过文件 magic numbers 查找 MIME 类型
版权所有(c)1996-1997 Cisco Systems,Inc。
该软件由 Cisco Systems 于 1997 年 7 月提交给 Apache Group。此 source code 的未来修订版和衍生版必须承认 Cisco Systems 是该模块的原始贡献者。所有其他许可和使用条件都是 Apache Group 的条件。
一些此 code 源自最初发布到 comp.sources.unix 的文件命令的自由 version。该程序的版权信息包含在下面。
- 版权所有(c)Ian F. Darwin,1987 年。由 Ian F. Darwin 撰写。
本软件不受美国电话电报公司或加州大学董事会的任何许可。
允许任何人在任何计算机系统上出于任何目的使用本软件,并对其进行更改并自由重新分发,但受以下限制:
- 对于使用本软件的后果,无论多么可怕,即使它们都存在缺陷,作者也不承担任何责任。
- 不得通过明确声明或遗漏来歪曲本软件的来源。由于很少有用户阅读过资源,因此必须在文档中显示学分。
- 修改后的版本必须明确标记,不得歪曲为原始软件。由于很少有用户阅读过资源,因此必须在文档中显示学分。
- 不得删除或更改此通知。
为了遵守达尔文先生的条款:从免费的“文件”命令中对此进行了非常严格的修改。
- all-in-one 文件,用于从 Apache 的一个 version 移动到下一个 version 时编译方便。
- Memory 分配是通过 Apache API 的池结构完成的。
- 所有函数都有必要的 Apache API 请求或服务器结构传递给它们,必要时调用其他 Apache API 例程。(i.e.,通常用于 logging,files 或 memory 分配本身或 function.)
- struct magic 已经从 array 转换为 single-ended 链表,因为它只在 time 生成一个 record,它只是按顺序访问,而 Apache API 没有等效的
realloc()
。 - 已更改函数以从服务器 configuration 而不是 globals 获取其参数。(它现在应该是可重入的,但尚未在线程中测试 environment.)
- 用于将结果打印到 stdout 的位置现在将它们保存在列表中,用于在 Apache 请求 record 中设置 MIME 类型。
- Command-line 标志已被删除,因为它们永远不会在这里使用。
MimeMagicFile 指令
描述: | 使用指定的魔术文件根据文件内容启用 MIME-type 确定 |
句法: | MimeMagicFile file-path |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_mime_magic |
MimeMagicFile
指令可用于启用此模块,默认文件在conf/magic
处分发。 Non-rooted paths 是相对于ServerRoot的。除非使用更具体的设置,否则虚拟主机将使用与主服务器相同的文件,在这种情况下,更具体的设置将覆盖主服务器的文件。
例
MimeMagicFile conf/magic