如何在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内置的webserver。
阅读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类型与之前相同,但$ _FILES中的类型索引返回 application / vnd.zend.serverconfig Linux环境和Windows中不太理想但有效的应用程序/八位字节流。
有关为何发生这种情况的任何想法?
值得一提的是我在Linux环境中的新手,所以我不知道如何设置网络服务器,所以,首先,我安装了Zend Server但后来我完全卸载了它并重新安装了所有内容手动使用apt-get。
答案 0 :(得分:0)
了解类型索引是由浏览器提供的,而不是我在Google Chrome中测试过的PHP并获得了正确的 application / zip
所以我谷歌如何在我之前测试的浏览器Firefox中修复此问题,我需要做的就是删除位于配置文件夹中的 mimeTypes.rdf 文件在〜/ .mozilla / firefox /
中