Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 11

Ограничение на количество загружаемых файлов в php.ini и ошибка типа Warning

14.05.2017, 15:07. Показов 7869. Ответов 6

Студворк — интернет-сервис помощи студентам
Есть форма, работающая через jQuery.ajax.
Три поля - название (input text), описание (textarea) и загрузка файлов (input file multiple). В php.ini прописано правило на максимальное количество файлов, загружаемых на сервер - 20 штук. Параметр php.ini, если не ошибаюсь - max_files_upload
Форма:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form method="post" id="uploadForm" enctype="multipart/form-data" action="edit_c.php?type=create_album">
 
<h3><label for="title">Название</label></h3>
<input onchange="isFilesInForm ();" id="title" name="title" type="text" maxlength="20" required />
 
<h3><label for="description">Описание</label></h3>
<textarea id="description" name="description" maxlength="255"></textarea>
 
<h3><label for="file">Выберите файлы</label></h3>
<input accept="image/jpeg,image/png,image/gif" onchange="isFilesInForm ();" id="file" name="file[]" type="file" multiple="true" size="50" required />
<br/>
<input type="button" id="button" class="button" disabled value="Создать альбом">
<input type="hidden" name="owner" value="<?=$_COOKIE['userid'];?>" />
<input type="hidden" name="formid" value="addAlbum" />
</form>
<div id="loadingImageForm"></div><div id="progressbar"></div>
JS-обработка
JavaScript
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
/*проверка, есть ли файлы в форме*/
function isFilesInForm () {
 
    var firstFile = document.getElementById('file').files[0].name;
    var titleAlb = $('#uploadForm #title').val();
 
    if (firstFile != '' && titleAlb != '') {
 
        $("#button").removeAttr('disabled');
        $("#button").attr('onclick', 'uploadFiles();' );
        $("#button").attr('type', 'submit' );
 
    } else {
 
        $("#button").removeAttr("onclick");
        $("#button").attr('type', 'button' );
        $("#button").attr("disabled", "");
 
    }
 
}
 
/*
    загрузка файлов и вывод статуса загрузки
*/
 
function uploadFiles () {
    $('#uploadForm').on('submit', function(e){
        e.preventDefault();
        var $that = $(this), formData = new FormData($that.get(0));
        var control = document.getElementById("file");
        var file = $('#uploadForm #file').val();
        var titleAlb = $('#uploadForm #title').val();
        if (file != '' && titleAlb != '') {
            $('#progressbar').css({'font-weight':'normal','color':'black','display':'block'});
            loadingImageForm (1, '#uploadForm');
            $('#progressbar').html(langPack['Loading began']);
            $.ajax({
                url: $that.attr('action'),
                type: $that.attr('method'),
                contentType: false,
                processData: false,
                data: formData,
                dataType: 'json',
                success: function(data){
                    $('#progressbar').html('').html(langPack[data.status]);
                    $('#progressbar').css({'font-weight':'bold'});
                    // s - success
                    if (data.type == 's') {
                        $('#progressbar').css({'color':'green'});
                        document.location.href = home_page+"photo?user="+data.user+"&idalbum="+data.idalbum;
                    }
                    // e - error
                    if (data.type == 'e') {$('#progressbar').css({'color':'red'});}
                    loadingImageForm (0, '#uploadForm');
                },
                
            });
        }
    });
}
Обработка файлов (изображений) на php:

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
//максимальное количество загружаемых файлов
$maxFilesUpload = 20;
 
$id = $_COOKIE['userid'];
 
//количество файлов в массиве $_FILES
$countfiles = count($_FILES['file']['name']);
 
if (($countfiles>$maxFilesUpload) or ($countfiles<1)) {
 
    //отправка в json-формате сообщения о превышении допустимого количества файлов (не работает)
    echo '{"status":"status5","type":"e"}';
 
    exit ();
 
}
 
//проверка типов файлов, изменение размеров изображений, запись в БД данных о файле изображения
foreach ($_FILES['file']['name'] as $k=>$v) {
 
    if (($_FILES['file']['type'][$k] == 'image/jpeg') OR ($_FILES['file']['type'][$k] == 'image/png')
    OR ($_FILES['file']['type'][$k] == 'image/gif') OR ($_FILES['file']['type'][$k] == 'image/jpg')) {
 
        unset ($names_files);
 
        for ($x=0;$x<count($size);$x++){
 
            $md5 = substr (md5 (rand(0,999999)), 0, 8);
 
            $name = $size[$x][2].'_'.$md5;
 
            switch ($_FILES['file']['type'][$k]) {
 
                case 'image/jpeg': 
 
                $im=imagecreatefromjpeg($_FILES['file']['tmp_name'][$k]); 
                
                break;
                
                case 'image/png': 
                
                $im=imagecreatefrompng($_FILES['file']['tmp_name'][$k]); 
                
                break;
                
                case 'image/gif': 
                
                $im=imagecreatefromgif($_FILES['file']['tmp_name'][$k]); 
                
                break;
                
                case 'image/jpg': 
                
                $im=imagecreatefromjpeg($_FILES['file']['tmp_name'][$k]); 
                
                break;
 
            }
 
            //Определяем тип файла для записи в поле type (jpeg,png,jpg,gif)
            $ex = explode("/",$_FILES['file']['type'][$k]);
 
            $type = $ex[1];
            
            $k1=$size[$x][0]/imagesx($im);
            $k2=$size[$x][1]/imagesy($im);
            
            if ($k1>=$k2)$koef=$k2;
            if ($k2>$k1)$koef=$k1;
            if (($k1 >= 1) && ($k2 >= 1)) $koef = 1;
            
            $w=intval(imagesx($im)*$koef);
            $h=intval(imagesy($im)*$koef);
            
            $im1=imagecreatetruecolor($w,$h);
            imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
 
            if ($type == 'jpeg' or $type == 'jpg') {
 
                $type = 'jpg';
 
                imagejpeg($im1,"$dir_photoalbums"."$name".".jpg",90) or die ('{"status":"status7","type":"e"}');
 
            } elseif ($type == 'gif') {
 
                imagegif ($im1,"$dir_photoalbums"."$name".".gif") or die ('{"status":"status8","type":"e"}');
 
            } elseif ($type == 'png') {
 
                imagepng ($im1,"$dir_photoalbums"."$name".".png",2) or die ('{"status":"status9","type":"e"}');
 
            }
 
            imagedestroy($im);
            imagedestroy($im1);
            
            $names_files .= $name.",";
 
        }
        
        $q = $DB->add("INSERT INTO photo (owner, namefile, album, type, creationTime) VALUES ($id,'$names_files',
            ".$id_album.",'$type',".time().")");
        
        $q_id = $DB->read("SELECT id FROM photo WHERE namefile = '$names_files' ORDER BY id DESC LIMIT 0, 1");
 
        $last_ids .= $q_id[0]['id'].",";
 
        //максимум - 20 файлов для загрузки
        if ($i == $maxFilesUpload) {
            break;
        }
 
        $i++;
 
    }
 
}
Пробовал ограничить количество циклов foreach через счетчик $i, но все равно вылазят ошибки. Пример того, если загружаю 22 файла. Вылазят 2 ошибки (на каждый файл сверх лимита в 20 штук):

PHP
1
2
3
Warning: Maximum number of allowable file uploads has been exceeded in Unknown on line 0
 
Warning: Maximum number of allowable file uploads has been exceeded in Unknown on line 0
Что порекомендуете сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2017, 15:07
Ответы с готовыми решениями:

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

Warning: mail(): 'sendmail_from' not set in php.ini or custom 'From:' header missing in
Вот пытаюсь написать самый простенький скрипт работы с мылом &lt;? mail('mikel-forever@yandex.ru','тест','Привет'); ?&gt; Но...

Ограничение количества загружаемых строк в Memo
Подскажите, как можно ограничить количество строк, загружаемых в мемо. Текст может загружаться из буфера или .тхт файла, но там...

6
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
14.05.2017, 15:32
Цитата Сообщение от kulerz Посмотреть сообщение
Что порекомендуете сделать?
не загружать все 1 запросом
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 11
14.05.2017, 16:03  [ТС]
Это не вариант.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,912
14.05.2017, 17:51
kulerz, может вы не так поняли? Если файлов больше 20 - разбивать на несколько ajax запросов.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 11
14.05.2017, 19:35  [ТС]
Это в js можно реализовать?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,912
14.05.2017, 19:36
kulerz, конечно, где же ещё.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 11
14.05.2017, 23:15  [ТС]
Вопрос решен несколько другим путем. Дабы вообще не передавать данные на сервер, прежде чем не уложимся в 20 файлов, решено деактивировать кнопку submit через disabled. Код получился такой.
JavaScript
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
function isFilesInForm () {
 
    var files = document.getElementById('file').files;
    var titleAlb = $('#uploadForm #title').val();
 
    if (files.length >= 1 && files.length <=20 && titleAlb != '') {
 
        $("#button").removeAttr('disabled');
        $("#button").attr('onclick', 'uploadFiles();' );
        $("#button").attr('type', 'submit' );
        $('#error').css('display','none'); //скроем ошибку о файлах
 
    } else {
 
        if (files.length > 20) {
            $('#error').css('display','block'); //покажем ошибку, что загрузить можно от 1 до 20 файлов
        }
 
        $("#button").removeAttr("onclick");
        $("#button").attr('type', 'button' );
        $("#button").attr("disabled", "");
 
    }
 
}
 
function sliceFileList(filelist, from, to) {
  return Array.prototype.slice.call(filelist, from, to);
}
 
/*
    загрузка файлов и вывод статуса загрузки
*/
 
function uploadFiles () {
 
    $('#uploadForm').on('submit', function(e){
 
        e.preventDefault();
 
        var $that = $(this), formData = new FormData($that.get(0));
 
        var files = sliceFileList(document.getElementById("file").files, 0, 20);
 
        var title = $("#uploadForm #title").val();
 
        var description = $("#uploadForm #description").val();
 
        if (files.length >= 1 && files.length <=20 && title != '') {
            $('#progressbar').css({'font-weight':'normal','color':'black','display':'block'});
            loadingImageForm (1, '#uploadForm');
            $('#progressbar').html(langPack['Loading began']);
            $.ajax({
                url: $that.attr('action'),
                type: $that.attr('method'),
                contentType: false,
                processData: false,
                data: formData,
                dataType: 'json',
                success: function(data){
                    $('#progressbar').html('').html(langPack[data.status]);
                    $('#progressbar').css({'font-weight':'bold'});
                    // s - success
                    if (data.type == 's') {
                        $('#progressbar').css({'color':'green'});
                        document.location.href = home_page+"photo?user="+data.user+"&idalbum="+data.idalbum;
                    }
                    // e - error
                    if (data.type == 'e') {$('#progressbar').css({'color':'red'});}
                    loadingImageForm (0, '#uploadForm');
                },
                
            });
        }
    });
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2017, 23:15
Помогаю со студенческими работами здесь

что значит ошибка Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\php\kursovoi\save_user.php o
есть скрипт &lt;?php if (isset($_POST)) { $name = $_POST; if ($name == '') { unset($name);} } if (isset($_POST)) { $address =...

OpenDialog: ограничение на количество открываемых файлов
Здравствуйте. Делаю приложение на Delphi XE с использованием Firemonkey и сталкнулся с проблемой при открытии файлов через стандартный...

Есть ли в CommonDialog ограничение на количество открываемых файлов
Здравствуйте. Для открытия файлов использую CommonDialog, с разрешением открытия нескольких файлов. Подскажите пожалуйста какие ограничения...

TOpenDialog. Ограничение на количество выбранных файлов. Delphi7
Добрый день. Столкнулся с проблемой при использовании TOpenDialog с включенной опцией ofAllowMultiSelect. При выборе очень большого...

Ошибка в 2 PHP скриптах: Warning: mysql_fetch_array() expects parameter 1
два скрипта,выдают данную ошибку на сайте: 1) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru