Ввод HTML: загрузка нескольких файлов максимум на 20 - PullRequest
3 голосов
/ 04 июня 2011

У меня есть поле ввода html, например

<form method="post" action="process.php" enctype="multipart/form-data">
    <div>
        <h3>Files:</h3>
        <input type="file" multiple="multiple" name="image[]" />
        <input type="submit" value="Upload Image" />
    </div>
</form>

И я хочу, чтобы пользователь мог загружать несколько файлов одновременно.Мой php для этого использует цикл for для циклического перебора всех файлов, собирает информацию о каждом из них, а затем загружает их по одному.

for($i = 0;$image['name'][$i] == true;$i++)
{
    //code
}

Но это не будет загружать более 20,заканчивающийся ошибкой, Notice: Undefined offset: 20 in F:\www\hdp\process.php on line 39.Теперь, если бы я загрузил 5 изображений, это дало бы мне Notice: Undefined offset: 5 in F:\www\hdp\process.php on line 39, но это было бы нормально, потому что все равно было бы загрузить все 5 фотографий (0,1,2,3,4).Мне нужно, чтобы он загружал все фотографии, которые добавляет пользователь.
Я знаю, что одновременная загрузка большого количества файлов может быть плохой идеей, но это всего лишь администратор сайта, и это сайт портфолио фотографий.Поэтому он должен иметь возможность загружать много фотографий одновременно.И если это важно, они загружаются в базу данных MySQL.

Ответы [ 4 ]

10 голосов
/ 02 октября 2012

max_file_uploads in php.ini Значение было причиной. Измените его на то, что вы хотите, и оно будет работать.

1 голос
/ 04 июня 2011

Я немного озадачен частью 'не загружу больше 20' ... на чем вы основываетесь?Вы получаете ошибку в любом случае.

Измените цикл for, чтобы вместо него проверять isset ($ image ['name'] [$ i]), и вы больше не получите ошибку.

for($i = 0; isset($image['name'][$i]); $i++)
{
    //code
}

Как указано yes123, вы рискуете достичь максимального размера POST и должны проверить php.ini.

1 голос
/ 04 июня 2011

Проверьте настройки php.ini для post_max_size

Также

upload_max_filesize  
memory_limit 
max_execution_time 
max_input_time
0 голосов
/ 04 июня 2011

Аналогично решению Fosco, но работает по-другому (вместо сравнения isset используется sizeof и int к int вместо)

Ни это, ни его не обязательно лучше, просто разные способы решения проблемы.

for($i = 0, $size = sizeof($image['name']); $i < $size; $i++)
{
    //code
}

И нет, он не запускается sizeof() каждую итерацию. Это простой способ снизить производительность.

...