if语句返回true

时间:2013-08-02 14:48:26

标签: php

有人能告诉我为什么,在选择psd文件时,php代码中的if语句传递为true并回显“image / vnd.adobe.photoshop”吗?

<?php

if (isset($_POST['submit'])) {
    foreach ($_FILES["myimages"]["error"] as $key => $error) {
        $tmp_name = $_FILES["myimages"]["tmp_name"][$key];
        $name = $_FILES["myimages"]["name"][$key];
        $imagetype = $_FILES['myimages']['type'][$key];

        if ($imagetype == "image/jpeg" || "image/gif") {
            echo $imagetype;
        }
    }
}

?>

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

<form method="post" enctype="multipart/form-data" action="<? echo basename(__file__); ?>">
    <input type="file" name="myimages[]" multiple>
    <input name="submit" type="submit" value="submit">
</form>

</body>
</html>

6 个答案:

答案 0 :(得分:9)

因为这是错误的

if( $imagetype == "image/jpeg" || "image/gif" ) { /*...*/ }

应该是

if( $imagetype == "image/jpeg" || $imagetype == "image/gif" ) { /*...*/ }

甚至

if( in_array($imagetype, ["image/jpeg", "image/gif"]) ) { /*...*/ }

也就是说,因为非空字符串被认为是真的,所以满足了IF条件。

答案 1 :(得分:4)

这是因为按位运算符的优先级低于等式检查。它是这样的:

  1. 你有

    if ($imagetype == "image/jpeg" || "image/gif") {
    
  2. Equality首先解析为boolean,您的表达式变为:

    if (false || "image/gif") {
    
  3. 在表达式中使用时,非空字符串被视为true。这意味着我们有

    if (false || true) {
    
  4. 当然,结果是true,所以if-block会执行。

答案 2 :(得分:2)

你的||声明不正确

$imagetype == "image/jpeg" || 
$imagetype == "image/gif"

正在发生的事情是“image / gif”返回true,而且返回的是false或者是 $ imagetype ==“image / jpeg”。假|| true == true

答案 3 :(得分:2)

您还可以具备以下条件:

if ( $imagetype == ("image/jpeg" || "image/gif") ) {
    echo $imagetype;
}

其他答案都很好,这只是解决问题的另一种方法:)

答案 4 :(得分:1)

if($imagetype == "image/jpeg" || "image/gif")

与以下内容相同:

$condition1 = $imagetype == "image/jpeg";
if($condition1 || "image/gif")

将评估,在这种情况下

if($condition1 || true)
无论$condition1

的值是多少,

评估为 true

因为if(false || true)返回true

另一点:我建议使用 === 运算符而不是 == ,因此您的最终代码应为:

if($imagetype === "image/jpeg" || $imagetype === "image/gif")

答案 5 :(得分:1)

您编写的if语句应该被评估为TRUE。

这是因为你没有将“image / gif”与任何东西进行比较,你只是将它作为一个布尔值进行评估。当PHP作为布尔值计算时,PHP将字符串值(不是"0"或空(""))转换为TRUE。所以,基本上,你的IF语句是说“如果$imagetype等于"image/jpeg""image/gif"为真,那么就这样做。

你的if条件总是会通过,因为“image / gif”总是会被评估为true,所以$imagetype的值实际上是什么并不重要。