PHP in_array,如果检查不起作用

时间:2012-11-01 03:01:55

标签: php

如果检查一个值是否在数组中,我有一个脚本并且很简单。我似乎无法找出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在数组中。或者我不知道自己在做什么。

3 个答案:

答案 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快得多。