我有以下PHP代码,可以显示上传文件的MIME类型。
使用此脚本上传 somefile.csv 的结果如下。
当然,MIME类型应该是text/csv。但是我使用的框架(Symfony 1.4)使用fileinfo方法。
而且我进一步测试了一下,在Ubuntu上运行
我相信上面的CSV文件内容是有效的,对吗?如果一个字段包含空格,那么这个字段不必被放在引号内,对吗?
<?php
if ($_POST) {
var_dump($_FILES);
$finfo = new finfo(FILEINFO_MIME_TYPE);
var_dump($finfo->file($_FILES['file']['tmp_name']));
} else{
?>
<form method="POST" enctype="multipart/form-data"><input name="file" type="file"><input name="submit" value="send" type="submit"/></form>
<?php
}
使用此脚本上传 somefile.csv 的结果如下。
array (size=1)
'file' =>
array (size=5)
'name' => string 'somefile.csv' (length=12)
'type' => string 'text/csv' (length=8)
'tmp_name' => string '/tmp/phpKiwqtu' (length=14)
'error' => int 0
'size' => int 3561
string 'text/x-fortran' (length=14)
当然,MIME类型应该是text/csv。但是我使用的框架(Symfony 1.4)使用fileinfo方法。
而且我进一步测试了一下,在Ubuntu上运行
file --mime-type somefile.csv
命令返回somefile.csv: text/x-fortran
,而mimetype somefile.csv
命令返回somefile.csv: text/csv
。somefile.csv是用MSOffice创建的(我不知道这是否重要)。显然,mimetype
使用了一些很棒的mime数据库(http://freedesktop.org/wiki/Software/shared-mime-info),而file
没有使用。
- PHP使用
file
还是mimetype
或都不用吗? - 此外,我不确定该做什么;我的上传文件格式错误吗?我需要使用不同的MIME数据库吗?PHP有漏洞吗?发生了什么?
编辑:
之所以被检测为Fortran程序,是因为somefile.csv只包含以下内容:
somecolumn;
C F;
我相信上面的CSV文件内容是有效的,对吗?如果一个字段包含空格,那么这个字段不必被放在引号内,对吗?