如果检查一个值是否在数组中,我有一个脚本并且很简单。我似乎无法找出if标签在数组中运行的原因。
else if (!in_array($type, $avatarformats)) {
$error .= '<div class="alert error">You\'re image is not a allowed format</div>';
unlink($_FILES['file']['tmp_name']);
}
当脚本读取$ type和$ avatarformats时,它是=以下。
$avatarformats = Array ( [0] => .jpg [1] => .jpeg [2] => .png )
$type = .png
if标记在不应该运行时运行,因为.png在数组中。或者我不知道自己在做什么。
答案 0 :(得分:2)
我不确定您是如何确定类型的,但通常来自['type']
的{{1}}是内容类型(例如$_FILES
),而不是文件名的扩展名本身。
要测试文件扩展名,您可以使用以下代码:
'image/jpeg'
答案 1 :(得分:0)
注意:使用exif_imagetype(),请阅读http://www.php.net/manual/en/function.exif-imagetype.php
function image_allowed($imgfile) {
$types = array(IMAGETYPE_JPEG, IMAGETYPE_PNG);
return in_array(exif_imagetype($imgfile), $types);
}
然后在你的代码中。
else if (!image_allowed($_FILES['file']['tmp_name'])) {
$error .= '<div class="alert error">You\'re image is not a allowed format</div>';
unlink($_FILES['file']['tmp_name']);
}
答案 2 :(得分:-2)
我怀疑in_array()
返回true,因为语句!in_array($type, $avatarformats)
由于完全停止而正在评估为true。由于小数位,它正在将$type
的值作为整数进行评估。
据说你有两个选择:
1)尝试从文件扩展名中剥离点,即“.png”到“png”,然后再将其添加到数组中,然后进行测试。
2)或将条件更改为以下内容:else if (in_array($type, $avatarformats) == false) {
in_array()
是一只奇怪的野兽,我试着在最好的时候避免它。 isset()是你的朋友,并且在大多数情况下都比in_array快得多。