如何在 PHP 中允许某些扩展类型?

How to allow certain extension types in PHP?

我一直在尝试保护 3 个文件输入,但没有成功。 我需要这些文件输入只接受 jpeg、jpg、png、gif。我知道mime 类型使用起来不可靠,因此,我不想再使用它。如果在 PHP 过程方式 中有比 IF 语句 更干净或更快的方法来做到这一点会更好。

HTML代码

<input type="file" name="index_desl_Cfile1" class="upload-image" />
<input type="file" name="index_desl_Cfile2" class="upload-image" />
<input type="file" name="index_desl_Cfile3" class="upload-image" />

PHP代码

$target_dir = "../site_images/";

$index_deslC1 = $target_dir . basename($_FILES["index_desl_Cfile1"]["name"]);
$index_deslC2 = $target_dir . basename($_FILES["index_desl_Cfile2"]["name"]);
$index_deslC3 = $target_dir . basename($_FILES["index_desl_Cfile3"]["name"]);

// Check if file already exists
 $src1 = 'http://localhost//397/admin/site_images/'.$index_deslC1;
 $src2 = 'http://localhost/397/admin/site_images/'.$index_deslC2;
 $src3 = 'http://localhost/397/admin/site_images/'.$index_deslC3;    
if (@getimagesize($src1)) {
    echo "Sorry, file already exists 1. ";
    $uploadOk = 0;

}
 else if (@getimagesize($src2)) {
    echo "Sorry, file already exists 2. ";
    $uploadOk = 0;
}
 else if (@getimagesize($src3)) {
    echo "Sorry, file already exists 3. ";
    $uploadOk = 0;
}

    $imageFileTypeC1 = $_FILES["index_desl_Cfile1"]["type"];
    $imageFileTypeC2 = $_FILES["index_desl_Cfile2"]["type"];
    $imageFileTypeC3 = $_FILES["index_desl_Cfile3"]["type"];

    $allowed_types = array('image/jpg','image/png','image/jpeg','image/gif');

    if (!in_array($imageFileTypeC1, $allowed_types)) {

            echo "ILLEGAL FILE TYPE 1";
            $uploadOk = 0;

        }
    else if (!in_array($imageFileTypeC2, $allowed_types)) {

            echo "ILLEGAL FILE TYPE 2";
            $uploadOk = 0;

        }
    else if (!in_array($imageFileTypeC3, $allowed_types)) {

            echo "ILLEGAL FILE TYPE 3";
            $uploadOk = 0;

        }           
         else {
            $uploadOk = 1;
        }
    if ($uploadOk == 0) {
        echo " Sorry, your file was not uploaded.";
    // if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["index_desl_Cfile1"]["tmp_name"], $index_deslC1)) {
            echo "The file ". basename( $_FILES["index_desl_Cfile1"]["name"]). " has been uploaded.";
        }
  else if (move_uploaded_file($_FILES["index_desl_Cfile2"]["tmp_name"], $index_deslC2)) {
            echo "The file ". basename( $_FILES["index_desl_Cfile2"]["name"]). " has been uploaded.";
        }
  else if (move_uploaded_file($_FILES["index_desl_Cfile3"]["tmp_name"], $index_deslC3)) {
            echo "The file ". basename( $_FILES["index_desl_Cfile3"]["name"]). " has been uploaded.";
        }

它将有超过 3 个文件输入。

我终于明白了。我没有在检查文件类型的地方使用 if 语句,而是使用了 switch 语句,它的效果非常好!

这是所有代码...

$target_dir = "../site_images/";

$index_deslC1 = $target_dir . basename($_FILES["index_desl_Cfile1"]["name"]);
$index_deslC2 = $target_dir . basename($_FILES["index_desl_Cfile2"]["name"]);
$index_deslC3 = $target_dir . basename($_FILES["index_desl_Cfile3"]["name"]);

// Check if file already exists
$src1 = 'http://localhost//397/admin/site_images/'.$index_deslC1;
$src2 = 'http://localhost/397/admin/site_images/'.$index_deslC2;
$src3 = 'http://localhost/397/admin/site_images/'.$index_deslC3;    
if (@getimagesize($src1)) {
echo "Sorry, file already exists 1. ";
$uploadOk = 0;

}
else if (@getimagesize($src2)) {
echo "Sorry, file already exists 2. ";
$uploadOk = 0;
}
else if (@getimagesize($src3)) {
echo "Sorry, file already exists 3. ";
$uploadOk = 0;
}

$imageFileTypeC1 = $_FILES["index_desl_Cfile1"]["type"];
$imageFileTypeC2 = $_FILES["index_desl_Cfile2"]["type"];
$imageFileTypeC3 = $_FILES["index_desl_Cfile3"]["type"];

$allowed_types = array('image/jpg','image/png','image/jpeg','image/gif');

switch ($allowed_types) {
    case in_array($imageFileTypeC1, $allowed_types):
      echo "GOOD 1!";
      $uploadOk = 1;
    break;
    case in_array($imageFileTypeC2, $allowed_types):
      echo "GOOD 2!";
      $uploadOk = 1;
    break;
    default:
      echo "ILLEGAL FILE TYPE";
      $uploadOk = 0;
}

 if ($uploadOk == 0) {
    echo " Sorry, your file was not uploaded.";
 // if everything is ok, try to upload file
 } else {
    if (move_uploaded_file($_FILES["index_desl_Cfile1"]["tmp_name"], $index_deslC1)) {
        echo "The file ". basename( $_FILES["index_desl_Cfile1"]["name"]). " has been uploaded.";
    }
else if (move_uploaded_file($_FILES["index_desl_Cfile2"]["tmp_name"], $index_deslC2)) {
        echo "The file ". basename( $_FILES["index_desl_Cfile2"]["name"]). " has been uploaded.";
    }
else if (move_uploaded_file($_FILES["index_desl_Cfile3"]["tmp_name"], $index_deslC3)) {
        echo "The file ". basename( $_FILES["index_desl_Cfile3"]["name"]). " has been uploaded.";
    }