Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331

Проверка загружаемых файлов

28.01.2020, 23:12. Показов 843. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать, чтобы форма отправлялось только, если все загружаемые файлы прошли проверку на разрешённые форматы? А если хоть один файл не совпадает с разрешённым форматом, то форма не отправлялась.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php require "db.php"; // Подключение базы данных
$data = $_POST;
 
$login = $data['login'];
$login = trim($login); 
$login = strip_tags($login);
$login = htmlspecialchars($login);
 
$email = $data['email'];
$email = trim($email);
$email = strip_tags($email);
$email = htmlspecialchars($email);
 
$password = $data['password'];
$password = trim($password);
$password = strip_tags($password);
$password = htmlspecialchars($password);
 
$uploads_dir = '/img'; // Директория загрузки скриншотов продукта
$whitelist = ['jpg', 'png', 'gif']; // Допустимые форматы изображений
$images = $_FILES["product_images"]; // Загружаемые скриншоты
$poster = $_FILES["product_poster"]; // Загружаемые скриншоты
$file = $_FILES["product_file"]; // Загружаемый архив
$whitefile = ['zip', 'rar']; // Допустимые форматы изображений
 
 
function load_images($images, $whitelist, $uploads_dir)
{
 
// Есть ли ошибки?
foreach ($images["error"] as $key => $error) {
 
    // Если ошибок нет!
    if ($error == UPLOAD_ERR_OK) {
 
        $tmp_name = $images["tmp_name"][$key]; // Временный путь расположения картинок
        // basename() может предотвратить атаку на файловую систему;
        // может быть целесообразным дополнительно проверить имя файла
        $name = basename($images["name"][$key]);
 
$type = $images['name'][$key]; // Имя каждого загружаемого скриншота
 
// Определяем, что написано после точки в названии картинок
$result_type = substr(strstr($type, '.'), 1, strlen($type));
 
$error_images = 0;
// Проверяем на совпадение с разрешёнными, разрешениями картинок для загрузки
foreach($whitelist as $k => $v){ 
    if($result_type != $v){
$error_images++;
    } 
} // foreach($whitelist as $k => $v)
echo $error_images;
if ($error_images >=3) {
    echo '<div class="error_poster">Не допустимый формат.</div>';
    return false;
}
else {
    // Загрузка скриншотов
    return move_uploaded_file($tmp_name, ".$uploads_dir/$name");
}
 
}
 
 
} // foreach ($images["error"] as $key => $error)
} // function load_images($images, $whitelist, $uploads_dir)
 
function load_poster($poster, $whitelist, $uploads_dir)
{
 
        $tmp_name = $poster["tmp_name"]; // Временный путь расположения постера
        // basename() может предотвратить атаку на файловую систему;
        // может быть целесообразным дополнительно проверить имя файла
        $name = basename($poster["name"]);
 
$type = $poster['name']; // Имя загружаемого постера
 
// Определяем, что написано после точки в названии постера
$result_type = substr(strstr($type, '.'), 1, strlen($type));
 
$error_poster = 0;
// Проверяем на совпадение с разрешёнными, разрешениями картинок для загрузки
foreach($whitelist as $k => $v){ 
    if($result_type != $v){
$error_poster++;
    } 
} // foreach($whitelist as $k => $v)
 
if ($error_poster >=3) {
    echo '<div class="error_poster">Не допустимый формат.</div>';
    return false;
}
else {
    // Загрузка постера
    return move_uploaded_file($tmp_name, ".$uploads_dir/$name");
    
}
} // function load_poster($poster, $whitelist, $uploads_dir)
 
$load_images = load_images($images, $whitelist, $uploads_dir);
$load_poster = load_poster($poster, $whitelist, $uploads_dir);
 
 
function load($load_images, $load_poster, $images, $poster, $whitelist, $uploads_dir) {
if ($load_images or $load_poster) {
    load_images($images, $whitelist, $uploads_dir);
    load_poster($poster, $whitelist, $uploads_dir);
} else
{
    return false;
}
}
 
 
load($load_images, $load_poster, $images, $poster, $whitelist, $uploads_dir);
 
 
?>
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>
<html lang="ru" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Awebuy – Регистрация</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="">
  <meta name="author" content="Yuri Belyavtsev">
    <link rel="stylesheet" href="css/form.css">
  </head>
  <body>
<form class="box" action="" method="post" enctype="multipart/form-data">
      <input type="text" name="name_product" placeholder="Название товара" value="<?php echo @$data['name_product'];?>">
 
 
      <div class="file-upload">
      <input class="file-upload__input" name="product_poster" type="file" id="product_poster" accept=".jpg,.gif,.png"/>
      <button class="file-upload__button" type="button">Постер</button>
      <span class="file-upload__label"></span>
      </div>
 
 
      <div class="file-upload">
      <input class="file-upload__input" name="product_images[]" type="file" multiple id="product_images" accept=".jpg,.gif,.png"  />
      <button class="file-upload__button" type="button">Скриншоты</button>
      <span class="file-upload__label"></span>
  </div>
 
 
      <textarea  id="description_product" name="description_product" placeholder="Подробное описание!" value="<?php echo @$data['description_product'];?>"></textarea>
 
      <input type="text" name="price_product" placeholder="Цена" value="<?php echo @$data['price_product'];?>">
 
      <div class="file-upload">
      <input class="file-upload__input" name="product_file" type="file" id="product_file" accept=".zip,.rar"  />
      <button class="file-upload__button" type="button">Архив</button>
      <span class="file-upload__label"></span>
  </div>
 
      <input type="submit" name="add_product" value="Добавить">
 
  </form>
 
 
<script src="js/file-upload-forms.js"></script>
  </body>
</html>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.01.2020, 23:12
Ответы с готовыми решениями:

Проверка типов загружаемых файлов.
В общем нужно загрузить 3-4 файла быть. Могут быть (проверка на js есть), далее нужно проверять на стороне сервера. Проверок на картинки...

Сосчитать количеств загружаемых файлов
друзья расскажите пожалуйста как посчитать колличество загруженных файлов через форму &lt;input type=&quot;file&quot; multiple...

Изменить формат загружаемых файлов
Мне нужен простой загрузчик муз. файлов( mp3, wav). Нашел урок: http://www.codeharmony.ru/materials/143 Хотел сделать по нему. Но, он для...

1
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
29.01.2020, 10:49
js fileapi на клиенте. вот статья: Использование файлов в веб приложениях
но учтите, что на сервере все равно придется перепроверять, а то могут обойти
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.01.2020, 10:49
Помогаю со студенческими работами здесь

Транслитерация загружаемых файлов на PHP
Здравствуйте, я криворукий (ну т.е. начинающий) PHP-программист, и есть у меня такая проблема: у меня есть скрипт загрузки файлов в...

Добавить форматы загружаемых файлов в форму
Здравствуйте! Возможно глупый вопрос, но в PHP я ноль, только только начал изучать в связи с заданием. Так вот есть сайт на typo3, на...

Отправка почты БЕЗ проверки загружаемых файлов
Здравствуйте. Я тут делаю форму отправки данных ч/з mail(), все дела Тут задумался: А зачем мне проверять загружаемые файлы, если: ...

Имена загружаемых файлов
Возникла проблема с именем загруженного файла. А именно в том, что если загружать файлы в именах, которых присутствует кириллица, то там...

Ограничение на количество загружаемых файлов в php.ini и ошибка типа Warning
Есть форма, работающая через jQuery.ajax. Три поля - название (input text), описание (textarea) и загрузка файлов (input file multiple)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru