严重FileInfo的问题(Severe fileinfo issues)

2019-10-16 16:24发布

我在共享主机,并已与他们作战获得FileInfo的工作,我们终于得到了它的工作,而我又一直在打另一个障碍,我已经基本上得到了这一点,因为我创建一个新的文件上传工具和我们需要知道的MIME类型正在上传的,但FileInfo的不想打球。

所以,.sql文件将返回text / plain的,正确的。

然而,所有其他文件将简单地返回应用程序/八位字节流,我想知道为什么是这样的话,我不希望得罪主机了与吨的问题,所以我想在这个问题上的一些研究之前我费尽口舌他们furthur。

码:

function get_mime($filename)
{
    $result = new finfo(FILEINFO_MIME_TYPE, "/usr/share/file/magic.mime"); 
    return $result->file($filename, FILEINFO_MIME_TYPE);
}

echo $user->get_mime($_FILES['file']['tmp_name'][$i]);

任何帮助将不胜感激,非常感谢

更新

所以我去了有关更新MIMETYPE检查的代码,我已经更新了代码,以反映如下(为函数):

function get_mime($filename)
{
    $result = new finfo(FILEINFO_MIME_TYPE, "/usr/share/file/magic.mime"); // return mime type ala mimetype extension

    if (is_resource($result) === true)
    {
        return $result->file($filename, FILEINFO_MIME_TYPE);
    } else {
        return "failed";
    }

    return false;
}

很明显,你可以看到我已输出时,失败失败 。 这是发生时间的100%,并删除if语句,该函数返回应用程序/八位字节流,这是不正确。

上载过程将是:用户上传 - >文件移动到上述公众一个临时文件夹,(upload_check),他们将通过FileInfo的检查,如果该文件是不是我们接受它就会被丢弃,否则将被复制到公共文件,然后从临时文件夹丢弃。

我创建过程中,仍然FileInfo的不希望合作并返回应用程序/八位字节流的一切,即使他们只是保存上面的public_html文件夹在服务器上。

有什么建议?

可靠的人

Answer 1:

忠告

我真的认为你是错在这里把事情...

当一个文件被上传它A.也返回mime type的自动$_FILES

echo $_FILES['file']['type'][$i] ;

b。如果你想默对没有上载的文件,或尝试做一个更好地确定客户端头部中提供什么,使用mime_content_type http://php.net/manual/en/function.mime-content-type .PHP

echo mime_content_type($fileName);

C.折旧

无论mime_content_typeFileinfo维护不正确,他们一直在贬值。

更新:它曾经被错误地标记为手册中的过时,但它已被固定https://bugs.php.net/bug.php?id=71367于2016年一月14日由于可以看到支持7.0所以不停产在所有。

或者可以建议你看看更换以下链接

的压缩文件获取MIME类型

http://www.php.net/manual/en/function.mime-content-type.php#87856

D.你也可以使用getID3 http://sourceforge.net/projects/getid3/files/getID3%28%29%201.x/1.9.3/它可以检查真正的MIME类型,一些常见的文件...

E.使用Linux命令行可能保护程序

$mime = shell_exec("file -bi " . escapeshellarg($file));   

或者在Mac

$mime = shell_exec("file -b --mime ".escapeshellarg($file));

最后

你为什么要上工作$_FILES['file']['tmp_name'][$i]直接? 这已经知道给这么多问题

尝试

$tempDir = ""; // Temp
foreach ( $_FILES ["file"] ["error"] as $key => $error ) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES ["file"] ["tmp_name"] [$key];
        $name = $_FILES ["file"] ["name"] [$key];
        $tempFile = "$tempDir/$name";
        move_uploaded_file ( $tmp_name, $tempFile );
        echo $user->get_mime ( $tempFile );
        unlink ( $tempFile );

    }
}


Answer 2:

您应该检查,如果你想使用魔法文件存在,可以通过PHP读取。

尝试:

$finfo = finfo_open(FILEINFO_MIME, "/usr/share/file/magic.mime");

if (!$finfo) {
    echo "Opening fileinfo database failed";
    exit();
}

finfo_close($finfo);


文章来源: Severe fileinfo issues