检查上传的文件是否为 csv 格式

2022-08-30 10:20:04

我正在用php上传一个文件,如果它是一个csv文件,我只想上传它。我相信我的语法适合内容类型。当它是一个csv文件时,它总是转到其他语句。我在这里做错了什么?

if (($_FILES["file"]["type"] == "text/csv"))
{

}
else
{

}

如果我更改内容类型,它适用于该格式,而不是csv。


答案 1

哑剧类型可能不是某些系统可以读取/保存它们的不同。(例如,有时IE会以)的形式发送.csv文件),因此您最好的选择是构建一个允许值的数组并对其进行测试,然后找到所有可能的值进行测试。text/csvapplication/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");
}

如果您希望可以进一步检查mime是否以文本/纯文本形式返回,则可以运行a以确保其中有足够的逗号作为csv。preg_match


答案 2

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
}

推荐