PHP mime_content_type() 在 Windows 上失败

Posted

技术标签:

【中文标题】PHP mime_content_type() 在 Windows 上失败【英文标题】:PHPs mime_content_type() fail on windows 【发布时间】:2010-09-16 21:14:59 【问题描述】:

我知道 mime_content_type() 已被弃用,但在我看来,目前的替代方案更糟。 Finfo 似乎需要在 Windows 上添加文件和更改 ini 方向;我不想在我正在制作的脚本中要求这个。

我需要找到文件的 mimetype,但是在 Windows 上调用 mime_content_type($filename) 时会失败。 mime_magic.magicfile 指向正确的文件,但是在 ini 文件中启用 mime_magic.debug 时,我收到以下错误消息:

<b>Warning:</b> mime_content_type()[@987654321@: mime_magic not initialized in <b>C:\xampp\htdocs\test.php</b> on line <b>2</b>

我不确定这是否是一个问题,或者当我禁用调试时它是否仍然发生并且它只是没有告诉我。

我查了一下,在ini文件中启用了extension=php_mime_magic.dll,并且httpd.conf指定了

LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so

我正在使用 XAMPP 1.6.5。

【问题讨论】:

【参考方案1】:

这可能与this bug report 有关。当您按照'FOO' is not a valid mimetype, entry skipped 的行调用脚本时,您的错误日志中是否有任何错误?

不幸的是,该特定线程中的最终响应是继续使用@987654322@..

通读another thread 描述相同的问题 - 当您打开调试时,您将其设置为“开”还是 1?不应该有所作为,但在上面链接的线程中,这似乎是这种情况下解决方案的一部分。


我不确定这是否是一个问题,或者当我禁用调试时它是否仍然发生并且它没有告诉我。

当您在关闭调试的情况下回显mime_content_type 的值时会得到什么?

【讨论】:

我无法让它与线程中发布的任何建议的解决方案一起使用,并且原始发布者也放弃了。再说一次,我也无法让它与 Fileinfo 一起使用:-(【参考方案2】:

Finfo 似乎需要在 Windows 上添加文件和更改 ini 方向;我不想在我正在制作的脚本中要求这个。

你试过finfo_buffer吗?这允许您将文件用作字符串,因此您可以这样做:

$finfo = new finfo;
$filename = $_GET['filename'];
var_dump($finfo->buffer(file_get_contents($filename)));

该错误报告中还有一个问题是 mime 数据库已过期 - 您是否尝试过使用不同的副本?

【讨论】:

【参考方案3】:

Fileinfo 可能是在 Windows 上运行的一个技巧。此处的说明:http://forums.zend.com/viewtopic.php?f=8&t=337#p14681

【讨论】:

以上是关于PHP mime_content_type() 在 Windows 上失败的主要内容,如果未能解决你的问题,请参考以下文章

在 mime_content_type() 中在 Wordpress 中上传图片时出错

PHP如何判断是不是是MP3文件

docx 的 PHP mimetype 检测

PHP中常见的header类型

php实现获取文件mime类型的方法

PHP,如何获得 Mime 类型 - 不可能的任务?