Как исправить ошибку Notice: Undefined index: userfile при загрузке файла

180
17 октября 2018, 23:10

Добавляю форму загрузки файла в свой скрипт, но настранице с формой отображается ошибка

Notice: Undefined index: userfile in /var/www/general.php on line 20

Подскажите, как исправить ошибку в этой строке if(($_FILES['userfile']['type'] == 'image/gif' || $_FILES['userfile']['type'] == 'image/jpeg' || $_FILES['userfile']['type'] == 'image/png') && ($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=512000))

Обработчик загрузки файла

$uploaddir = '/var/blogx/img/';
// это папка, в которую будет загружаться картинка
$apend='logo.jpg'; 
// это имя, которое будет присвоенно изображению 
$uploadfile = "$uploaddir$apend"; 
//в переменную $uploadfile будет входить папка и имя изображения
// В данной строке самое важное - проверяем загружается ли изображение (а может вредоносный код?)
// И проходит ли изображение по весу. В нашем случае до 512 Кб
if(($_FILES['userfile']['type'] == 'image/gif' || $_FILES['userfile']['type'] == 'image/jpeg' || $_FILES['userfile']['type'] == 'image/png') && ($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=512000)) 
{ 
// Указываем максимальный вес загружаемого файла. Сейчас до 512 Кб 
  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) 
   { 
   //Здесь идет процесс загрузки изображения 
   $size = getimagesize($uploadfile); 
   // с помощью этой функции мы можем получить размер пикселей изображения 
     if ($size[0] < 501 && $size[1]<1501) 
     { 
     // если размер изображения не более 500 пикселей по ширине и не более 1500 по  высоте 
     echo "Логотип удачно загружен и установлен!</b>"; 
     } else {
     echo "Загружаемое изображение превышает допустимые нормы (ширина не более - 500; высота не более 1500)"; 
         unlink($uploadfile); 
         // удаление файла 
         } 
   } else {
   echo "Файл не загружен, вернитеcь и попробуйте еще раз";
   } 
} else { 
echo "Размер файла не должен превышать 512Кб.<br> Поддерживается JPEG, GIF и PNG 
формат файла.";
} 

Форма

<form name="upload" class="uk-form" action="" method="POST" enctype="multipart/form-data"><input type="hidden" id="jstokenCSRF" name="tokenCSRF" value="a42c790ce05dc1fefc2da4a81de47a6f8706d403">
<input type="file" name="userfile">
    <button type="submit" name="upload" class="uk-button uk-button-primary">Загрузить</button></form>

Спасибо!

Answer 1

Можно так:

if ($_FILES['userfile']['type'] == 'image/gif') { ... }

Или в добавок сделать проверку существования переменной с помощь isset:

if (isset($_FILES['userfile']) && $_FILES['userfile']['type'] == 'image/gif') { ... }
Answer 2
$white = ['image/gif', 'image/jpeg', 'image/png']; // Список разрешенных типов
if ($_SERVER['REQUEST_METHOD'] == 'post') { // Если форма отправлена методом POST
    if (isset($_FILES['userfile']) && in_array($_FILES['userfile']['type'], $white)) {
        // Если существует $_FILES['userfile'] и его тип есть в $white тогда обрабатываем
        ...
    }
}
READ ALSO
Как запустить крон в laravel 2 раза в день?

Как запустить крон в laravel 2 раза в день?

Запустил серверНаписал скрипт, который нужно выполнять два раза в день(утром и вечером)

155
php+mysql: Подсчитать количество вхождений каждого символа в базе

php+mysql: Подсчитать количество вхождений каждого символа в базе

Есть таблица БД с текстовыми полями ~30млнзаписей UTF-8

165
Как в Composer сделать update только одного плагина?

Как в Composer сделать update только одного плагина?

У меня в проекте соедини много плагинов но нужно сделать update только одного или двух плагинов , как можно это сделать ?

191