<?php
$finfo = new finfo();
$fileinfo = $finfo->file($_FILES["fileToUpload"]["tmp_name"], FILEINFO_MIME);
switch($fileinfo) {
case "image/gif":
case "image/jpeg":
case "image/png":
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],
"upload/" . $_FILES["fileToUpload"]["name"]);
echo "Your file has successfully been uploaded, and is awaiting moderator approval for points." . "<html><br><a href='uploadfile.php'>Upload more.</a>";
break;
default:
echo "Files must be either JPEG, GIF, or PNG and less than 10,000 kb";
break;
}
?>
最近引起我的注意,这里没有任何错误,它只是不起作用,因为我的服务器php只有5.2 lemme知道你们是否可以找到一种方法让它使用MIME
答案 0 :(得分:5)
pecl install fileinfo
?
答案 1 :(得分:1)
在Linux服务器上,您可能会懒惰并使用:
$type = exec("file -iL " . escapeshellcmd($fn) . " 2>/dev/null");
$type = trim(strtok(substr(strrchr($type, ":"), 1), ";"));
答案 2 :(得分:1)
mime_content_type
可能仍然适合您。虽然它现在位于手册的fileinfo
部分下,但在将fileinfo
引入PHP核心之前,它已经存在 way 。
请注意,如果您的主机将Apache的mime.types
文件移出正常位置,可能需要进行一些配置,如该页面上的评论中所述。
答案 3 :(得分:1)
注意:我知道这并没有直接回答有关PHP版本的问题。但是,我在尝试解决我的问题时发现了这篇文章,因此对未来的某些人来说可能会有所帮助。
我最近在尝试验证MP3文件时一直在努力使用Fileinfo
库。我已经明白,即使您已为您的环境正确设置魔术数据库文件,也有一些known issues带有Fileinfo
和MP3文件。
如果Fileinfo
无法确定MP3的mime类型,则可能会返回application/octet-stream
。尝试验证文件时不太有用。
作为替代方案,我已经开始使用以下系统命令。这与@ mario的建议非常相似,到目前为止 似乎比Fileinfo
更可靠。
$path = 'path/to/your/mp3/file.mp3';
$mime = exec('file -b --mime-type ' . $path);
我在Ubuntu 10.04和OSX Mountain Lion上测试了这个,所以我猜它适用于大多数Unix环境。我相信也有一些Windows端口。
说实话,我不完全确定这种方法的安全性或可靠性,但我在Stackoverflow上看到它推荐a few times here。如果有人有任何更多信息,请分享!