Apache 模块 mod_mime_magic
Description: | 通过查看文件内容的几个字节来确定文件的 MIME 类型 |
---|---|
Status: | Extension |
Module Identifier: | mime_magic_module |
Source File: | mod_mime_magic.c |
Summary
该模块以与 Unix file(1)
命令相同的方式确定文件的MIME type:它查看文件的前几个字节。它旨在作为mod_mime无法解决的情况的“第二道防线”。
此模块来自 Unix 的file(1)
命令的免费版本,该版本使用“幻数”和文件内容中的其他提示来确定内容是什么。仅当MimeMagicFile指令指定了魔术文件时,此模块才处于活动状态。
魔术文件的格式
文件的内容是 4-5 列中的纯 ASCII 文本。允许使用空行,但可以忽略。带 Comments 的行使用井号(#
)。其余各行针对以下各列进行了解析:
Column | Description | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 从<_ 18>开始检查的字节数“ > 1”表示对先前的非“ > ”行的依赖性 | |||||||||||||||||||||||||||||||||
2 | 要匹配的数据类型<_ 21> | byte | 单个字符 | <_ 23> | short | 机器指令的 16 位整数 | <_ 25> | long | 机器 Sequences 的 32 位整数 | <_ 27> | string | 任意长度的字符串 | <_ 29> | date | 长整数日期(自 Unix 时代/ 1970 年以来的秒数) | <_ 31> | beshort | 大尾数 16 位整数 | <_ 33> | belong | big-endian 32 位整数 | <_ 35> | bedate | 大尾数 32 位整数日期 | <_ 37> | leshort | 小尾数 16 位整数 | <_ 39> | lelong | 小尾数 32 位整数 | <_ 41> | ledate | 小尾数 32 位整数日期 | |
3 | 要匹配的数据内容 | |||||||||||||||||||||||||||||||||
4 | MIME 类型(如果匹配) | |||||||||||||||||||||||||||||||||
5 | MIME 编码(如果匹配)(可选) |
例如,以下魔术文件行将识别某些音频格式:
# 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
个文件之间的区别。 (这些是不兼容的文件格式,它们使用相同的文件后缀.)
# 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 \376\067\0\043 application/msword
0 string \320\317\021\340\241\261 application/msword
0 string \333\245-\0\0\0 application/msword
第五列可以包含可选的 MIME 编码。例如,这可以识别压缩的文件并为其设置编码。
# gzip (GNU zip, not to be confused with
# [Info-ZIP/PKWARE] zip archiver)
0 string \037\213 application/octet-stream x-gzip
Performance Issues
此模块不适用于每个系统。如果您的系统几乎无法满足其负载,或者您正在执行 Web 服务器基准测试,则可能不希望启用此功能,因为处理不是免费的。
但是,已努力提高原始file(1)
代码的性能,使其适合繁忙的 Web 服务器。它是为服务器设计的,那里有成千上万的用户发布自己的文档。这在 Intranet 上可能很常见。很多时候,服务器可以对文件内容做出比文件名所允许的更多的智能决策是有帮助的...即使只是为了减少当用户不正确地命名自己的文件时“为什么我的页面无法工作”的调用。您必须确定额外的工作是否适合您的环境。
Notes
以下 Comments 适用于mod_mime_magic模块,并包含在此处以符合贡献者要求得到其承认的版权限制。
Note
mod_mime_magic:通过文件魔术数字查找 MIME 类型
版权所有(c)1996-1997 Cisco Systems,Inc.
该软件由 Cisco Systems 在 1997 年 7 月提交给 Apache Group。此源代码的 Future 修订版和派 bio 必须承认 Cisco Systems 是此模块的原始贡献者。所有其他许可和使用条件均为 Apache 集团的许可和使用条件。
此代码中的某些内容来自最初发布到 comp.sources.unix 的 file 命令的免费版本。该程序的版权信息如下。
Note
-版权所有(c)Ian F. Darwin,1987 年。由 Ian F. Darwin 撰写。
该软件不受美国电话电报公司或加利福尼亚大学董事会的任何许可。
任何人均有权在任何计算机系统上以任何目的使用此软件,并对其进行更改和自由分发,但要遵守以下限制:
-
作者对此软件的后果不承担任何责任,无论这些后果有多么严重,即使它们是由软件中的缺陷引起的。
-
明确声明或遗漏均不得歪曲本软件的起源。由于很少有用户阅读过源代码,因此必须在文档中显示功劳。
-
更改后的版本必须明确标明,并且不得将其误认为是原始软件。由于很少有用户阅读过源代码,因此必须在文档中显示功劳。
-
本声明不可删除或更改。
Note
为了遵守达尔文先生的条款:此命令已从免费的“文件”命令中进行了非常显着的修改。
-
从一个版本的 Apache 迁移到另一个版本时,提供了多合一文件,以便于编译。
-
内存分配是通过 Apache API 的池结构完成的。
-
所有功能都有必要的 Apache API 请求或服务器结构传递给它们,以调用其他 Apache API 例程。 (即,通常用于日志记录,文件或本身或调用函数的内存分配.)
-
struct magic 已从数组转换为单端链表,因为它一次仅增长一条记录,只能按 Sequences 访问,并且 Apache API 没有
realloc()
等效项。 -
功能已更改,可以从服务器配置而不是全局参数中获取参数。 (它现在应该是可重入的,但尚未在线程环境中进行测试.)
-
现在将其用于将结果打印到 stdout 的位置将它们保存在一个列表中,这些列表用于在 Apache 请求 Logging 设置 MIME 类型。
-
命令行标志已被删除,因为它们在此不再使用。
MimeMagicFile Directive
Description: | 使用指定的魔术文件基于文件内容启用 MIME 类型确定 |
---|---|
Syntax: | MimeMagicFile file-path |
Context: | 服务器配置,虚拟主机 |
Status: | Extension |
Module: | mod_mime_magic |
MimeMagicFile
指令可用于启用此模块,默认文件位于conf/magic
。无根路径是相对于ServerRoot的。除非使用更特定的设置,否则虚拟主机将使用与主服务器相同的文件,在这种情况下,更特定的设置将覆盖主服务器的文件。
Example
MimeMagicFile conf/magic