我有一个上传图像文件的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>
答案 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.";
}
}
这对我来说很好。