如何检查文件上传文件是完全图像而不是视频文件和其他内容?
我测试了一个简单的代码,用于检查上传的文件是否为图像。
形式
<form method="post" enctype="multipart/form-data">
<input type="file" name="photo" accept="image/*">
<input type="submit" name="submit" value="Test">
</form>
虽然我有accept="image/*"
,但我可以轻松将其更改为All types
并获取非图片文件。
用于检查文件是否为有效图片的代码(仅用于测试)
if($_POST['submit']) {
$tmp_file = $_FILES['photo']['tmp_name'];
if(mime_content_type($tmp_file)) {
var_dump(mime_content_type($tmp_file));
} else {
echo 'error1';
}
if(getimagesize($tmp_file)) {
var_dump(getimagesize($tmp_file));
} else {
echo 'error2';
}
}
到目前为止,我对此进行了3次测试,2次传递1次失败:
getimagesize
提供错误)我需要做些什么?我不知道是什么问题,因为它没有给出var_dump()
和echo 'errors'
的任何结果。我现在想的是 PHP 正在接受该文件。
注意
我需要这样做,以便只上传有效的图片。
注2
标记问题上接受的答案与我无关。
更新
如果我尝试上传小于 128M 的视频,则会返回一些内容。但如果它大于 128M ,我的localhost
中什么都没有,但我在生产网站上测试了它,它给了我一个REQUEST TIME OUT
。
答案 0 :(得分:1)
查找此类文件扩展名并检查有效类型...
function getextension($name){
$count=substr_count($name,".");
if($count>1){//some cases have two dotes
$name= preg_replace('/\.(?=.*\.)/', '_', $name);
}
list($txt, $ext) = explode(".", $name);
return $ext;
}
$name = $_FILES['imageupload']['name'];//Name of the File
$image_extension = getextension($name);
$allowed_extension = array("jpg", "png", "gif", "bmp", "jpeg","JPG","PNG","GIF","BMP","JPEG");
$image_extension=getextension($name);
if (!in_array($image_extension, $allowed_extension)) {
$error_flag = 1;
$message = "Invalid File Format";
}
答案 1 :(得分:1)
根据问题点解析和检查扩展名是不够的。
我建议在加载文件后检查文件 EXIF(可交换图像信息)数据。
您可以在扩展基础上进行基本验证,如果成功,请检查图像的exif数据。
为此你需要一个单独的DLL加载,它将具有exif相关的功能。