我有这个图片上传PHP文件。一切似乎都有效,除了最大尺寸(300k),因为它接受任何尺寸的图像......
<?php
if((!empty($_FILES["ex1"])) && ($_FILES['ex1']['error'] == 0)) {
$filename = basename($_FILES['ex1']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "jpg") || ($ext == "jpeg") || ($ext == "png") || ($ext == "gif") && ($_FILES["ex1"]["type"] == "image/jpeg") || ($_FILES["ex1"]["type"] == "image/png") || ($_FILES["ex1"]["type"] == "image/gif") &&
($_FILES["ex1"]["size"] < 30000)) {
$newname = dirname(__FILE__).'/../temp/'.time();
if (!file_exists($newname)) {
if ((move_uploaded_file($_FILES['ex1']['tmp_name'],$newname.'.'.$ext))) {
echo "Hecho! Guardada como: ".$newname;
} else {
echo "Error: Se produjo un problema durante la subida".$newname;
}
} else {
echo "Error: El archivo ".$_FILES["ex1"]["name"]." ya existe";
}
} else {
echo "Error: Tamaño máximo excedido (300kb) o formato erróneo (jpg, png, gif)";
}
} else {
echo "Error: No existe el archivo";
}
?>
答案 0 :(得分:1)
&&
的优先级高于||
,因此a || b && c
等于a || (b && c)
。
你有:
($_FILES["ex1"]["type"] == "image/gif") && ($_FILES["ex1"]["size"] < 30000)
这意味着,只有GIF图像必须小于300KB 在您的&#34;或&#34;周围放置括号团体:
if (
(($ext == "jpg") || ($ext == "jpeg") || ($ext == "png") || ($ext == "gif")) &&
(($_FILES["ex1"]["type"] == "image/jpeg") || ($_FILES["ex1"]["type"] == "image/png") || ($_FILES["ex1"]["type"] == "image/gif")) &&
($_FILES["ex1"]["size"] < 30000)
)
{
答案 1 :(得分:1)
您缺少一些括号。 OR将覆盖AND,当一个条件匹配时,一切都将为真。
在OR块周围放置括号,如下所示:
if (
(
($ext == "jpg") || ($ext == "jpeg") || ($ext == "png") || ($ext == "gif")
) && (
($_FILES["ex1"]["type"] == "image/jpeg") || ($_FILES["ex1"]["type"] == "image/png") || ($_FILES["ex1"]["type"] == "image/gif")
) && (
($_FILES["ex1"]["size"] < 30000)
)
) {
(缩进以提高可读性)
在检查文件大小时,您在30000
中错过了一个零。
300000相当于大约300KB。
所以,改变
$_FILES["ex1"]["size"] < 30000
到
$_FILES["ex1"]["size"] < 300000
答案 2 :(得分:1)
Gerald和Siguza都对他们所说的是正确的。但是,我想添加一些内容。
大而复杂的IF条件严重影响了代码的可读性。你有兴趣做这样的事情:
function handleUpload(){
$maxFileSize = 30000;
$allowedExtensions = array('jpg','jpeg','gif');
if($_FILES["ex1"]["size"] > $maxFileSize){
echo "File is too big";
return false;
}
$ext = substr($filename, strrpos($filename, '.') + 1);
if(!in_array($ext, $allowedExtensions)){
echo "Extension not allowed";
return false
}
// Handle upload
return true;
}
目标是: 1 - 尽快返回,这使代码更易于阅读和调试 2 - 不要制作复杂的结构,这使代码更容易阅读和调试 3 - 允许对每个块进行注释,并在上载失败时输出更准确的消息。
如果您遵循这种结构,您可以更快,更轻松地编写代码并减少出错的机会。
我希望这会有所帮助。