php上传csv,php-检查文件以csv格式上传

php-检查文件以csv格式上传

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

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

{

}

else

{

}

如果更改内容类型,则不适用于csv。

7个解决方案

71 votes

MIME类型可能不是preg_match,某些系统可以读取/保存它们不同。 (例如,有时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");

}

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

Alan Cole answered 2020-07-21T02:35:30Z

36 votes

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

}

ukliviu answered 2020-07-21T02:35:55Z

8 votes

您不能总是依靠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

CSV有多种MIME类型。

您可能最好检查扩展名,同样也不是很可靠,但是对于您的应用程序来说可能很好。

$info = pathinfo($_FILES['uploadedfile']['tmp_name']);

if($info['extension'] == 'csv'){

// Good to go

}

代码未经测试。

Eddie answered 2020-07-21T02:36:32Z

5 votes

所以我今天遇到了这个。

尝试通过查看$_FILES['upload_file']['type']来验证上传的CSV文件的MIME类型,但对于使用各种浏览器的某些用户(不一定是所述用户之间的同一浏览器;例如,它在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.

}

}

Garvin answered 2020-07-21T02:37:01Z

4 votes

由于您担心用户会错误地上传其他文件,因此建议您在标签中使用accept=".csv"。 当用户上传文件时,它将仅在浏览器中显示csv文件。 如果您找到了更好的解决方案,请让我知道,因为我也在尝试相同条件下的操作-“受信任的用户,但要避免出错”

Bhavesh Garg answered 2020-07-21T02:37:21Z

3 votes

MIME类型选项不是验证CSV文件的最佳选择。 我使用此代码在所有浏览器中都运行良好

$type = explode(".",$_FILES['file']['name']);

if(strtolower(end($type)) == 'csv'){

}

else

{

}

Vaibhav Shahu answered 2020-07-21T02:37:41Z

0 votes

简单使用“接受”和“必需” 并避免了太多典型和不必要的编码。

manish yadav answered 2020-07-21T02:38:02Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值