替代finfo()for php< 5.3

时间:2011-03-22 22:11:16

标签: php

<?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

4 个答案:

答案 0 :(得分:5)

pecl install fileinfo

http://pecl.php.net/package/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。如果有人有任何更多信息,请分享!