有人能告诉我为什么,在选择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>
答案 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)
这是因为按位运算符的优先级低于等式检查。它是这样的:
你有
if ($imagetype == "image/jpeg" || "image/gif") {
Equality首先解析为boolean,您的表达式变为:
if (false || "image/gif") {
在表达式中使用时,非空字符串被视为true
。这意味着我们有
if (false || true) {
当然,结果是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
的值实际上是什么并不重要。