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

验证文件扩展名时出现PHP或语句问题,php,Php,我在使用PHP或语句验证上传文件的扩展名时遇到问题。下面的代码应该检查文件扩展名,如果它不等于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,

我在使用PHP或语句验证上传文件的扩展名时遇到问题。下面的代码应该检查文件扩展名,如果它不等于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文件并拒绝任何其他文件


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

您不能随意使用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';
}
有关_array()中
的更多信息,请参阅手册:

解决方案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';
}

解决方案一是基于对备选方案的否定。这与解决方案2相同(即被否定的和)。这两种解决方案在逻辑意义上是相等的,但是

解决方案3当然更好。这是因为,将来每次需要检查扩展时,扩展数组都将对您可用。而每次编写时,如果使用相同的“常量”,则相同的if是错误的,并且未来的改进是困难的



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

我有两种解决方案供您选择

第一个解决方案:

<?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';
    }
?>


您需要设置一个数组,并检查它是否位于\u array()
中。只需阅读一些php基础知识。从技术上讲,第一个答案需要2秒钟。(带解释)关于OP的代码从一开始就失败的原因。