【发布时间】:2017-05-20 01:00:08
【问题描述】:
如何检查上传的文件是否单独是图片而不是视频文件之类的?
我测试了一个简单的代码来检查上传的文件是否是图片。
表格
<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 次失败:
- 测试图像 = 通过。
- 测试一个非图像有效的 .srt 文件 = 已通过(给
getimagesize一个错误) - 测试有效视频文件.mp4 = 失败(提交后加载5-10秒,没有报错)
对此我需要做些什么?我不知道是什么问题,因为它没有给出来自var_dump() 和echo 'errors' 的任何结果。我现在确实认为 PHP 正在接受该文件。
注意
我需要这样做,以便只上传有效的图像。
注2
标记问题的已接受答案不适用于我。
更新
如果我尝试上传小于 128M 的视频,它会返回一些内容。但是,如果它大于 128M,它在我的 localhost 中什么也得不到,但我在生产站点中对此进行了测试,它给了我一个 REQUEST TIME OUT。
【问题讨论】:
-
图像文件的扩展名有限,如 .jpg、.jpeg、.png、.gif 等,您可以检查它们
-
依赖用户提供的扩展是不安全的。
标签: php file-upload upload