我在共享主机,并已与他们作战获得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文件夹在服务器上。
有什么建议?
可靠的人
忠告
我真的认为你是错在这里把事情...
当一个文件被上传它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_type
& Fileinfo
维护不正确,他们一直在贬值。
更新:它曾经被错误地标记为手册中的过时,但它已被固定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 );
}
}
您应该检查,如果你想使用魔法文件存在,可以通过PHP读取。
尝试:
$finfo = finfo_open(FILEINFO_MIME, "/usr/share/file/magic.mime");
if (!$finfo) {
echo "Opening fileinfo database failed";
exit();
}
finfo_close($finfo);