【问题标题】:Wrong MIME-Type for uploaded ZIP files上传的 ZIP 文件的 MIME 类型错误
【发布时间】:2015-01-04 06:39:07
【问题描述】:

如何在 Linux 和 Windows 环境中处理上传的 ZIP 文件的 MIME 类型验证?

我创建了一个用于测试的 ZIP 文件并下载了另一个(第一个 Google 结果)并将它们用作以下代码的参数:

$finfo = new finfo( FILEINFO_MIME );

echo $finfo -> file( 'benchmark.zip' ), '<br />', $finfo -> file( 'css3menu.zip' ), '<br />';

echo mime_content_type( 'benchmark.zip' ), '<br />', mime_content_type( 'css3menu.zip' );

它报告了我:

application/zip; charset=binary
application/zip; charset=binary
application/zip
application/zip

在两种环境中,Linux 使用 Apache 和 Windows,使用 PHP 内置网络服务器。

在阅读 this answer 之后,我还认为 application/octet-stream 是有效的,因此我将它们都添加到了我的上传处理程序中。

但是上传失败,报告我的文件类型无效:(

我检查了所有内容,发现都是正确的,所以我决定用最基本的上传实现(连同调试代码)来隔离问题:

if( isset( $_POST['button'] ) ) {

    print '<pre>'; print_r( $_FILES );

    $finfo = new finfo( FILEINFO_MIME );

    echo $finfo -> file( 'benchmark.zip' ), '<br />', $finfo -> file( 'css3menu.zip' ), '<br />';

    echo mime_content_type( 'benchmark.zip' ), '<br />', mime_content_type( 'css3menu.zip' ), '<br />';
}

?>

<form enctype="multipart/form-data" action="http://localhost/test.php" method="post">

<input type="file" name="file[]" id="file" />

<input type="submit" name="button" value="Send" />

</form>

FileInfo 和 mime_content_type() 报告的 MIME-Type 与之前相同,但 $_FILES 中的 type 索引返回了 application/vnd.zend.serverconfig Linux 环境和 Windows 中不太理想但有效的 application/octet-stream

你知道为什么会这样吗?

值得一提的是我是 Linux 环境的新手,所以我不知道如何设置网络服务器,所以一开始我安装了 Zend Server,但后来我完全卸载它并使用 apt 手动重新安装所有东西-得到。

【问题讨论】:

    标签: php linux windows zip mime


    【解决方案1】:

    在了解 type 索引是由浏览器而不是 PHP 提供后,我在 Google Chrome 中进行了测试并得到了正确的 application/zip

    所以我用谷歌搜索了如何在 Firefox(我之前测试的浏览器)中解决这个问题,我需要做的就是删除位于 ~/.mozilla/firefox/

    【讨论】:

    • 在 Firefox 48.0 和 OSX 上,mimeTypes.rdf 文件位于此处:
    • 我刚刚找到了一个 mime 类型为“application/x-zip-compressed”的 zip 文件。
    猜你喜欢
    • 2012-02-05
    • 2014-07-05
    • 2012-06-01
    • 2015-11-01
    • 2012-06-29
    • 2011-10-22
    • 2011-06-09
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多