为什么这总是死?

时间:2010-01-12 02:52:21

标签: php

$extension = "jpg"

    if($extension != "jpg" || $extension != "gif" || $extension != "png") die("only jpg, gif, png acceptable");

似乎总是死()。

5 个答案:

答案 0 :(得分:6)

您希望&&不是||

读出来:

“如果x不等于Y或x不等于N”。

显然,x等于什么并不重要,只要YN不相等,语句将始终为真:)

答案 1 :(得分:5)

由于$extension不能同时为"jpg""gif""png",因此至少有两个子条件为真。

而且,由于您使用的是or (||)而不是and (&&),因此任何真正的子条件都会将整个条件设为真。

你想要这样的东西:

if (($extension != "jpg") && ($extension != "gif") && ($extension != "png")) {
    die ("only jpg, gif, png acceptable");
}

答案 2 :(得分:2)

您正在使用NOT EQUAL TO运算符和一堆ORs

$extension = "jpg"
if ($extension != "jpg" || 
    $extension != "gif" || 
    $extension != "png") 
    die("only jpg, gif, png acceptable");

您可以通过以下两种方式解决此问题之一:

  • 将所有||切换为&&
  • 简化它有一系列有效扩展名:

$valid = array('jpg' => true, 'gif' => true, 'png' => true);
if (!isset($valid[$extension])) {
    // not a valid extension
}

答案 3 :(得分:1)

$extension = "jpg"

    if($extension != "jpg" && $extension != "gif" && $extension != "png") die("only jpg, gif, png acceptable");

这可能有用

答案 4 :(得分:0)

已经解释了原因,而且您可以根据预期的结果执行此操作:

$extension = "jpg";
if(!in_array($extension,array("jpg","gif","png"))){
    die("only jpg, gif, png acceptable");
}