如何检查上传的文件是否仅为,是图像而不是视频文件等等?
我测试了一个简单的代码,它将检查上传的文件是否是图像。
表单
<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正在接受该文件。
Note
我需要这样做,以便只有一个有效的图像将被上传。
Note 2
关于这个有标记的问题的公认的答案不是和我一起工作。
更新
如果我试图上传一个小于128米的视频,它会返回一些内容。但是如果它大于1.28m,它在我的localhost中什么也得不到,但是我在一个生产站点上测试了它,它给了我一个REQUEST TIME OUT。
发布于 2017-01-05 13:04:06
找到像这样的文件扩展名并检查有效类型..。
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";
}发布于 2017-01-05 13:09:20
根据问题点,解析和检查扩展是不够的。
我建议在加载文件后检查文件EXIF (可互换图像信息)数据。
您可以在扩展的基础上进行基本验证,如果成功,检查图像的exif数据。
为此,您将需要一个单独的DLL来加载,这将具有exif相关的功能。
http://php.net/manual/en/ref.exif.php
https://stackoverflow.com/questions/41485804
复制相似问题