PHP图像错误的mimetype

时间:2013-11-11 13:29:32

标签: php android-file

我正在将我的Android应用中的图片上传到我的服务器。该应用程序使用Android摄像头意图,并通过PHP脚本上传是好的。

我想验证上传的文件是否是真实图像,我没有检查扩展名但是mimetype(我想这是最好的方法,告诉我,如果我错了)。

我正在使用Slackware Linux Apache服务器而我正在尝试此代码:

....
$finfo = finfo_open(FILEINFO_MIME, '/etc/httpd/magic');
....
fwrite($fp, finfo_file($finfo, "file.jpg"));
....

但我得到的是“application / octet-stream; charset = binary”而不是“image / jpeg; charset = binary”,它是从“file -i file.jpg”(shell命令)中提供的。

有什么问题?

4 个答案:

答案 0 :(得分:2)

使用$ finfo = finfo_open(FILEINFO_MIME)解决;而不是另一条线。我认为默认的魔术文件与我指定的不同。

答案 1 :(得分:0)

正如www.php.net/manual/en/ref.fileinfo.php所述:

<?php

function is_jpg($fullpathtoimage){
    if(file_exists($fullpathtoimage)){
        exec("/usr/bin/identify -format %m $fullpathtoimage",$out);
        //using system() echos STDOUT automatically
        if(!empty($out)){
            //identify returns an empty result to php
            //if the file is not an image

            if($out == 'JPEG'){
                return true;
            }
        }
    }
    return false;
}

?>

答案 2 :(得分:0)

或者,如果您已获得执行权并希望使用“hacky”解决方案,则只需执行您已完成的操作(使用file -i path shell_exec):

<?php
    function shell_get_mime_type($path) {
        if (is_readable($path)) {
            $command = 'file -i "' . realpath($path) . '"';

            $shellOutput = trim(shell_exec($command));
            //eg. "nav_item.png: image/png; charset=binary"

            if (!empty($shellOutput)) {
                $colonPosition = strpos($shellOutput, ':');

                if ($colonPosition !== false) {
                    return rtrim(substr($shellOutput, $colonPosition + 1));
                }

                return $shellOutput;
            }
        }

        return false;
    }
?>

答案 3 :(得分:-2)

尝试使用函数mime_content_type()