Загрузка аватаров по умолчанию с помощью php

Он продолжает выдавать мне одно и то же сообщение об ошибке, когда я не хочу загружать аватар и сохраняю значение по умолчанию «avatar1.jpg». "Неверный тип файла!" Что может быть не так? Когда я загружаю аватар, он работает нормально.

Этот код представляет собой функцию, которая остается в файле functions.php.

public function uploadAvatar(){
        $allowedExts = array("gif", "jpeg", "jpg", "png");
        $temp = explode(".", $_FILES["avatar"]["name"]);
        $extension = end($temp);
        if ((($_FILES["avatar"]["type"] == "image/gif")
                || ($_FILES["avatar"]["type"] == "image/jpeg")
                || ($_FILES["avatar"]["type"] == "image/jpg")
                || ($_FILES["avatar"]["type"] == "image/pjpeg")
                || ($_FILES["avatar"]["type"] == "image/x-png")
                || ($_FILES["avatar"]["type"] == "image/png"))
                && ($_FILES["avatar"]["size"] < 1000000)
                && in_array($extension, $allowedExts)) {
            if ($_FILES["avatar"]["error"] > 0) {
                redirect('register.php', $_FILES["avatar"]["error"], 'error');
            } else {
                if (file_exists("images/avatars/" . $_FILES["avatar"]["name"])) {
                    redirect('register.php', 'File already exists', 'error');
                } else {
                    move_uploaded_file($_FILES["avatar"]["tmp_name"],
                    "images/avatars/" . $_FILES["avatar"]["name"]);

                    return true;
                }
            }

        } 

        else {
            redirect('register.php', 'Invalid File Type!', 'error');
        }
    }

Этот код получает функцию " if($user->uploadAvatar()){ ... } "для установки изображения по умолчанию, если ничего не загружено.

if(isset($_POST['register-input'])){
    //Create Data Array
    $data = array();
    $data['name'] = $_POST['name'];
    $data['email'] = $_POST['email'];
    $data['username'] = $_POST['username'];
    $data['password'] = md5($_POST['password']);
    $data['password2'] = md5($_POST['password2']);
    $data['about'] = $_POST['about'];
    $data['last_activity'] = date("Y-m-d H:i:s");

    //Required Fields
    $field_array = array('name','email','username','password','password2');

        if($validate->isRequired($field_array)){
            if($validate->isValidEmail($data['email'])){
                if($validate->passwordsMatch($data['password'],$data['password2'])){
                        //Upload Avatar Image
                        if($user->uploadAvatar()){
                            $data['avatar'] = $_FILES["avatar"]["name"];
                        }   else{

                            $data['avatar'] = 'avatar1.jpg';
                        }

                        //Register User
                        if($user->register($data)){
                            redirect('index.php', 'You are registered and can now log in', 'success');
                        } else {
                            redirect('index.php', 'Something went wrong with registration', 'error');
                        }
                } else {
                    redirect('register.php', 'Your passwords did not match', 'error');
                }
            } else {
                redirect('register.php', 'Please use a valid email address', 'error');
            }
        } else {
            redirect('register.php', 'Please fill in all required fields', 'error');
        }

}

person Danny    schedule 22.07.2016    source источник
comment
Дэнни, ты сказал, что пробовал мой код, и он не работал, когда не было загрузки. В моем решении путь выполнения скрипта входит в путь $data['avatar']='avatar1.jpg'? Какая у вас ошибка?   -  person BeetleJuice    schedule 22.07.2016
comment
Я получаю эту ошибку на самом деле, она находится в функции. else { redirect('register.php', 'Недопустимый тип файла!', 'ошибка'); } }   -  person Danny    schedule 22.07.2016
comment
ты поместил мой блок кода в самое начало функции? (не начало основного сценария). Если да, то что появляется, когда вы делаете print_r($_FILES['avatar']) в верхней части этой функции, когда вы не загрузили ни одного файла?   -  person BeetleJuice    schedule 22.07.2016
comment
Вам действительно не следует использовать хэши паролей MD5 и вам действительно следует использовать встроенные функции PHP для защиты паролей. Перед хэшированием убедитесь, что вы не экранируете пароли и не используете какой-либо другой механизм очистки. При этом изменяется пароль и возникает ненужное дополнительное кодирование.   -  person Jay Blanchard    schedule 22.07.2016


Ответы (3)


Если вы не загрузите avatar файл, то при проверке $_FILES["avatar"]["type"] вы всегда будете получать ложные null == "image/gif" || null == "image/jpeg"....

Сначала проверьте, есть ли у вас этот файл, выполнив if (!empty($_FILES['avatar']))


Примечание. Вы можете изменить этот код:

($_FILES["avatar"]["type"] == "image/gif")
    || ($_FILES["avatar"]["type"] == "image/jpeg")
    || ($_FILES["avatar"]["type"] == "image/jpg")
    || ($_FILES["avatar"]["type"] == "image/pjpeg")
    || ($_FILES["avatar"]["type"] == "image/x-png")
    || ($_FILES["avatar"]["type"] == "image/png")

to

in_array($FILES['avatar']['type'], ["image/gif", "image/jpeg", "image/pjpeg", "image/x-png", "image/png"])
person Justinas    schedule 22.07.2016

ты можешь использовать :

                    if($user->uploadAvatar()){
                        $data['avatar'] = $_FILES["avatar"]["name"];
                    }   else{

                       $file =      'avatar1.jpg';

                       // Open the file to get existing content
                      $data = file_get_contents($file);

                     // New file
                        $new = 'new_name.jpg';

                     // Write the contents back to a new file
                      file_put_contents($new, $data);
                    }
person Ehsan    schedule 22.07.2016
comment
@Justinas, это образец, чтобы передать значение загрузки из файла. - person Ehsan; 22.07.2016
comment
Я думаю, что в функции uploadavatar() должно быть что-то не так. Потому что текст ошибки исходит оттуда. Что вы думаете? - person Danny; 22.07.2016

В верхней части uploadAvatar нужно проверить, есть ли файл для обработки перед началом работы. Запустите функцию с этими строками

if(empty($_FILES['avatar']) ||
   !file_exists($_FILES['avatar']['tmp_name']) ||
   !is_uploaded_file($_FILES['avatar']['tmp_name'])
) return false;
person BeetleJuice    schedule 22.07.2016