我正在将我的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命令)中提供的。
有什么问题?
答案 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()
。