限制文件上传的大小或文件类型不起作用

时间:2014-06-04 18:04:24

标签: php file upload restrictions

我有一个上传图像文件的PHP脚本,它运行正常。但是我想通过大小和类型来限制它,我不能让限制工作:

if ($_FILES["file"]["size"] > 10240) {
    die("Invalid file");
}

我认为应该捕获超过10kB的所有文件,但它似乎完全被忽略了。这个:

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if (($_FILES["file"]["size"] != "image/gif")
and ($_FILES["file"]["size"] != "image/jpeg")
and ($_FILES["file"]["size"] != "image/jpg")
and ($_FILES["file"]["size"] != "image/pjpeg")
and ($_FILES["file"]["size"] != "image/x-png")
and ($_FILES["file"]["size"] != "image/png")
and !in_array($extension, $allowedExts))
{
    die("Invalid file");
}

即使是允许的文件类型,也始终提供“无效文件”消息。扩展

这两段代码最初来自w3schools.com,但我已将它们更改为“不相等”而不是“相等”。

任何关于我做错事的想法都会感激不尽。

表格如下:

<form action="upload_image4.php" method="post" enctype="multipart/form-data">
  <input type="hidden" name="recid" value="<?php echo $recid; ?>" />
  Upload image: <input type="file" name="new_image" />
  <input type="submit" name="action" value="Upload" />
</form>

1 个答案:

答案 0 :(得分:0)

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 10240)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["file"]["error"] > 0) {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  } 
  else {
    //do something with the image
  }
}
else {
  echo "Invalid image";
  if ($_FILES["file"]["size"] >= 10240) {
    echo "Max filesize is 10kb.";
  }
}

这对我来说很好。