gpt4 book ai didi

php - 在 php 中检测 mime 类型失败

转载 作者:可可西里 更新时间:2023-10-31 22:44:45 26 4
gpt4 key购买 nike

我有以下显示上传文件的 MIME 类型的 PHP 代码。

<?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)使用了带有文件信息的方法。

我还进一步测试了命令(在 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 没有。

  1. PHP 是使用 file 还是 mimetype 还是两者都不使用?
  2. 此外,我不确定在这里做什么;我上传的文件格式有误吗?我必须使用不同的 MIME 数据库吗? PHP 有问题吗?这是怎么回事?

编辑:

之所以被检测为fortran程序是因为somefile.csv只包含以下内容:

somecolumn;
C F;

我相信 CSV 文件的上述内容是有效的,对吗?如果一个字段包含空格,则该字段不必放在引号内,对吧?

最佳答案

我这里没有 Unix 机器来检查真正的“魔法”文件(用于猜测 mime 类型的签名数据库),但快速的 Google 搜索揭示了这一点:

# $File: fortran,v 1.6 2009/09/19 16:28:09 christos Exp $
# FORTRAN source
0 regex/100 \^[Cc][\ \t] FORTRAN program
!:mime text/x-fortran

显然,它会扫描文件的开头,寻找以单个 C 字母加空格开头的行,这似乎是 Fortran style comment .因此误报:

somecolumn;
C F;

关于php - 在 php 中检测 mime 类型失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16190929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com