the*_*963 44 php syntax content-type file-upload
我正在上传一个文件在php中,如果它是一个csv文件,只想上传它.我相信我的语法适合内容类型.当它是一个csv文件时,它总是转到else语句.我在这做错了什么?
if (($_FILES["file"]["type"] == "text/csv"))
{
}
else
{
}
Run Code Online (Sandbox Code Playgroud)
如果我更改内容类型,它适用于该格式而不是csv.
Ala*_*ole 71
mime类型可能不是text/csv某些系统可以读取/保存它们不同.(例如,有时IE发送.csv文件application/vnd.ms-excel),所以你最好的办法是构建一个允许值数组并对其进行测试,然后找到要测试的所有可能值.
$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
if(in_array($_FILES['file']['type'],$mimes)){
// do something
} else {
die("Sorry, mime type not allowed");
}
Run Code Online (Sandbox Code Playgroud)
如果你希望你可以添加进一步的检查,如果mime以text/plain的形式返回,你可以运行一个preg_match以确保它有足够的逗号作为csv.
ukl*_*viu 36
CSV文件有很多可能的MIME类型,具体取决于用户的操作系统和浏览器版本.
这就是我目前验证CSV文件的MIME类型的方法:
$csv_mimetypes = array(
'text/csv',
'text/plain',
'application/csv',
'text/comma-separated-values',
'application/excel',
'application/vnd.ms-excel',
'application/vnd.msexcel',
'text/anytext',
'application/octet-stream',
'application/txt',
);
if (in_array($_FILES['upload']['type'], $csv_mimetypes)) {
// possible CSV file
// could also check for file content at this point
}
Run Code Online (Sandbox Code Playgroud)
您不能总是依赖MIME类型..
根据:http://filext.com/file-extension/CSV
text/comma-separated-values, text/csv, application/csv, application/excel, application/vnd.ms-excel, application/vnd.msexcel, text/anytext
Run Code Online (Sandbox Code Playgroud)
CSV有各种MIME类型.
您可能最好检查扩展,再次不太可靠,但对于您的应用程序,它可能没问题.
$info = pathinfo($_FILES['uploadedfile']['tmp_name']);
if($info['extension'] == 'csv'){
// Good to go
}
Run Code Online (Sandbox Code Playgroud)
代码未经测试.
小智 7
由于您担心用户错误地上传其他文件,我建议您使用accept=".csv"in<input>标签。当用户上传文件时,它只会在浏览器中显示 csv 文件。如果您找到了更好的解决方案,请告诉我,因为我也在尝试在相同的条件下做同样的事情 - “受信任的用户,但要避免错误”
小智 5
所以我今天遇到了这个。
尝试通过查看验证上传的CSV文件的MIME类型$_FILES['upload_file']['type'],但对于使用各种浏览器的某些用户(不一定要在所述用户之间使用相同的浏览器;例如,它在FF中对我来说效果很好,但对另一个用户却不起作用)在FF上)$_FILES['upload_file']['type']显示为“ application / vnd.ms-excel”,而不是预期的“ text / csv”或“ text / plain”。
所以我求助于使用(IMHO)更可靠的finfo_ *函数,如下所示:
$acceptable_mime_types = array('text/plain', 'text/csv', 'text/comma-separated-values');
if (!empty($_FILES) && array_key_exists('upload_file', $_FILES) && $_FILES['upload_file']['error'] == UPLOAD_ERR_OK) {
$tmpf = $_FILES['upload_file']['tmp_name'];
// Make sure $tmpf is kosher, then:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $tmpf);
if (!in_array($mime_type, $acceptable_mime_types)) {
// Unacceptable mime type.
}
}
Run Code Online (Sandbox Code Playgroud)