【发布时间】: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