昨天我开始编写一个上传文件,用于将图像上传到目录。因为我认识到我必须使用数组来处理这个更好的方式,我现在正在使用:
if(!empty($_FILES['image']['tmp_name'])){
$allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif');
foreach($_FILES['image']['name'] as $key => $array_value){
$file_name = $_FILES['image']['name'][$key];
$file_size = $_FILES['image']['size'][$key];
$file_tmp = $_FILES['image']['tmp_name'][$key];
$file_extension = strtolower(end(explode('.', $file_name)));
if (in_array($file_extension, $allowed_extension) === false){
$errors[] = 'file is not accepted';
}
if ($file_size > 2097152){
$errors[] = 'maxsize: 2MB';
}
$path = "a/b/c/";
$uploadfile = $path."/".basename($_FILES['image']['name'][$key]);
if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $uploadfile)){
echo "Das Bildmaterial wurde hochgeladen.";
}
}
}
问题是即使给出了不接受的结尾,我也可以一直上传文件。我不明白为什么上传发生时,而不是上传错误消息应该已经显示。我希望通过嵌入允许的代码扩展来获得更多安全性。如果有人能告诉我我做错了什么,我真的很感激。非常感谢。
答案 0 :(得分:1)
你应该使用“继续”
例如
foreach($_FILES['image']['name'] as $key => $array_value){
$file_name = $_FILES['image']['name'][$key];
$file_size = $_FILES['image']['size'][$key];
$file_tmp = $_FILES['image']['tmp_name'][$key];
$file_extension = strtolower(end(explode('.', $file_name)));
if (in_array($file_extension, $allowed_extension) === false){
$errors[] = 'file is not accepted';
continue;
}
// the rest of your loop goes here
}
然后它将转到循环中的下一个图像,而不是上传图像。
此处提供更多信息:http://php.net/manual/en/control-structures.continue.php
答案 1 :(得分:1)
您有两个if语句检查异常,但不对它们执行任何操作。
也许以下内容会有所帮助?
if(!empty($_FILES['image']['tmp_name'])){
$allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif');
foreach($_FILES['image']['name'] as $key => $array_value){
$file_name = $_FILES['image']['name'][$key];
$file_size = $_FILES['image']['size'][$key];
$file_tmp = $_FILES['image']['tmp_name'][$key];
$errors = array ();
$file_extension = strtolower(end(explode('.', $file_name)));
if (in_array($file_extension, $allowed_extension) === false){
$errors[] = 'file is not accepted';
}
if ($file_size > 2097152){
$errors[] = 'maxsize: 2MB';
}
if (count ($errors) == 0) {
$path = "a/b/c/";
$uploadfile = $path."/".basename($_FILES['image']['name'][$key]);
if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $uploadfile)){
echo "Das Bildmaterial wurde hochgeladen.";
}
}
else {
// do stuff with errors
}
}
}