验证文件扩展名时出现PHP OR语句问题

时间:2015-01-23 16:39:38

标签: php

使用PHP OR语句验证上传文件的扩展名时出现问题。以下代码应检查文件扩展名并定义错误,如果它不等于PNG,JPG,JPEG或GIF。

这是我的代码:

$file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if($file_extension !== "png" || "jpg" || "jpeg" || "gif") {
    $error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}

然而,只有在我定义一个文件扩展名时它才会起作用,例如:

if($file_extension !== "png") {
    $error = 'Thumbnail file must be a PNG';
}

这将接受PNG文件并拒绝任何其他文件。

如何使此代码按预期工作,我需要做些什么?

3 个答案:

答案 0 :(得分:7)

您无法根据需要使用OR运算符。你可以这样做:

$file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));

if(!in_array($file_extension, array("png", "jpg", "jpeg", "gif"))) {
    $error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}

有关in_array()的详情,请参阅手册:http://php.net/manual/en/function.in-array.php

答案 1 :(得分:3)

解决方案1:

if(!($file_extension == "png" || $file_extension == "jpg" || $file_extension == "jpeg" || $file_extension == "gif")) {
    $error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}

解决方案2:

if($file_extension !== "png" && $file_extension !== "jpg" && $file_extension !== "jpeg" && $file_extension !== "gif")) {
    $error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}

解决方案3:

$ext = array('png', 'jpg', 'jpeg', 'gif');
if(!in_array($file_extension, $ext)) {
    $error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
}

解决方案之一是基于对替代品的否定。这与解决方案二(这是否定的总和)相同。这两种解决方案在逻辑意义上是相同的,但是......

解决方案3 当然更好。这是因为,将来每次都需要检查扩展名,您可以使用扩展数组。并且每次写作,如果使用相同的"常数"错了,未来的改进很难。


在这种情况下,尝试在脚本开头,配置类或CONSTANTS(留给你)中声明可能的扩展数组,并且每次需要检查文件扩展名时,只需检查in_array。并且在将来,如果您需要额外的扩展,或者决定例如gif不再有用,只需更改这个数组即可。每隔一行代码应该保持不变。

答案 2 :(得分:0)

我有2个解决方案

第一个解决方案:

<?php
    $file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
    if($file_extension !== "png" || 
    $file_extension !== "jpg" || 
    $file_extension !== "jpeg" || 
    $file_extension !== "gif") {
        $error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
    }
?>

第二个解决方案:

<?php
    $file_extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
    if(!in_array($file_extension, array('png','jpg','jpeg','gif'))) {
        $error = 'Thumbnail file must be a PNG, JPG, JPEG or GIF';
    }
?>