[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка большого количества картинок
Alnr
Здравствуйте.

Я загружаю на сайт более 20 фото зараз, причем каждый файл
выбирается своим <input type=file name=N>, но все грузятся зараз, в
одной форме, нажатием одной кнопки Submit, у меня почему-то грузятся
только картинки до 20й включительно. Не "не более 20и", а первые 20
полей input.
Вопрос: почему так происходит, есть ли какие-то ограничения на число
полей и т.д., как это исправить? Программа написана на php4



Спустя 17 минут, 38 секунд (11.08.2011 - 02:39) Invis1ble написал(а):
На количество полей вроде нет ограничений, а если и есть - то это ограничения браузера.
Увелич в php.ini значение max_file_uploads

Спустя 11 часов, 24 минуты, 2 секунды (11.08.2011 - 14:03) Nikitian написал(а):
Показывайте код. Не удивлюсь, если там что-то типа for($i=0;$i<20;$i++)

Спустя 5 минут, 13 секунд (11.08.2011 - 14:08) Invis1ble написал(а):
Nikitian
вполне вероятно, но я глянул в php.ini и как оказалось по дефолту там стоит max_file_uploads = 20, скорее всего причина в этом )

Спустя 2 дня, 9 часов, 27 минут, 34 секунды (13.08.2011 - 23:36) Alnr написал(а):
При выводе формы стоит $i<60. Показывает 60 полей,
и имена полей правильные. При загрузке стоит тоже 60, но после $i=20
пустые переменные
речь не о максимальном числе загружаемых файлов, а о числе полей. Т.е. я не могу загрузить ОДИН файл, если я его загружаю в <input type=file name=21>/

Спустя 3 минуты, 47 секунд (13.08.2011 - 23:40) sharki написал(а):
Alnr
Самый лучший (ИМХО) вариант, это использовать http://swfupload.org/ там стооооолько интересных фитч, прям ух))

Спустя 5 часов, 11 минут, 36 секунд (14.08.2011 - 04:51) Invis1ble написал(а):
Alnr
покажи код загрузчика

Спустя 10 часов, 16 минут, 7 секунд (14.08.2011 - 15:07) Alnr написал(а):
Вот фрагмент кода (форма и собственно загрузка) и результат
отладочной печати, где видно, что до 20и картинка либо загружается
(если есть), либо выдается сообщение, что картинка не загружена (в эти
поля я и не загружал), а после 21 идет просто печать переменной цикла
$i и НИКАКИХ действий. Между тем, я загружал и в 21 поле, и в 50е и
другие выборочно. И делал отдельно, вне цикла, проверочную загрузку
из поля 21.


<!--- код загрузки файла --->

<
form action=addwg.php method=post enctype="multipart/form-data">
<
table><tr><td><table>
<? for ($i=1; $i<31; $i++)
{ ?>
<tr><td><?=$i;?> картинка</td>
<
td><input type="file" name="simg<?=$i;?>" value='' size="41"></td></tr>
<
tr><td> Не показывать <input type="checkbox" name="no<?=$i;?>"> </td>
<
td><input type="text" name="alt<?=$i;?>" value='' size="41"></td></tr>

<? } ?>

</table>
</
td>
<
td>
<
table>
<? for ($i=31; $i<61; $i++)
{ ?>
<tr><td><?=$i;?> картинка</td>
<
td><input type="file" name="simg<?=$i;?>" value='' size="41"></td></tr>
<
tr><td>Не показывать <input type="checkbox" name="no<?=$i;?>"></td>
<
td><input type="text" name="alt<?=$i;?>" value='' size="41"></td></tr>

<? } ?>


</table>
</
td--></tr>
<
tr><td><input type=hidden name=num value="<?=$rowid[0];?>" ></td>
<
td></td></tr>
<
tr><td></td><td><input type=submit name="sbmt" value="Загрузить"></td></tr>
</
table>
</
form>

<? $num=$_REQUEST['num'];
echo $num;

for ($i=1; $i<61; $i++)
{ echo $i;
if (isset($_FILES["simg".$i]) and ($_POST['sbmt']=='Загрузить'))
{echo 'a';
$simg = $_FILES["simg".$i]["tmp_name"];
echo $simg;
$simg_name = $_FILES["simg".$i]["name"];
$simg_size = $_FILES["simg".$i]["size"];
$simg_type = $_FILES["simg".$i]["type"];
$error_flag = $_FILES["simg".$i]["error"];
echo $error_flag;
// Если ошибок не было
if($error_flag == 0)
{
// print("Имя файла на нашем сервере (во время запроса): ".$simg."<br>");
// print("Имя файла на компьютере пользователя: ".$simg_name."<br>");
// print("MIME-тип файла: ".$simg_type."<br>");
// print("Размер файла: ".$simg_size."<br><br>");

$simg_name="g".$num."_$i.jpg";
$filename=$simg_name;
$simg_name='../gallery/'.$simg_name;
echo $simg_name;
move_uploaded_file($simg, $simg_name);
$simg=chmod($simg_name,0644);
$alt=$_REQUEST['alt'];
$ins="insert into gallery values ('', $num, '$filename', '$alt', 1)";
//echo ' a '.$ins."<br>";
$qli=mysql_query($ins);
//echo $qli;
echo "картинка $i загружена<br>";
} // end of if 2
else echo "картинка $i не загружена<br>";
} // end of if 1
} // for $i



?>


user posted image

Спустя 28 минут, 35 секунд (14.08.2011 - 15:36) Invis1ble написал(а):
О боже.... Приведи код в нормальный вид, я чуть глаза не сломал... ((
Вместо множества бесполезных дампов вставь лучше в самое начало блока загрузки
echo '<pre>'; print_r($_FILES); echo '</pre>';

И напиши, что выведет. И код в нормальном виде выложи.

Спустя 1 час, 41 минута, 7 секунд (14.08.2011 - 17:17) Alnr написал(а):
Отладочная печать в удобном мне виде, и сделана она для того, чтобы
было видно: цикл до 60, а не до 20и, как тут выше предполагали.

Поставил
echo '<pre>'; print_r($_FILES); echo '</pre>';

как я и ожидал, данные закончились 20м полем

(
...
[
simg20] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)
)

Остальные поля игнорируются.
У меня стояла подобная отладка ниже, но чтобы увидеть, что загрузка в
21м поле и далее не отрабатывает, достаточно просто распечатать
$_FILES, а это я и раньше делал.
Вопрос: почему игнорируется?

Спустя 11 минут, 1 секунда (14.08.2011 - 17:28) Invis1ble написал(а):
Может тебе самому и удобно ориентироваться в таком бардаке, но мне нет. Поэтому и написал, чтоб ты поставил print_r($_FILES)
Напиши, что выведет var_dump(ini_get('max_file_uploads'));
и выложи нормально отформатированный код без всяких там echo и комментов типа // print_r blalbla

Спустя 3 часа, 40 минут, 42 секунды (14.08.2011 - 21:09) Alnr написал(а):
Переписанный код тестовой страницы. Подчеркиваю, что загрузка всех
файлов производится в одном цикле, одинаково, и файлы из 20 картинок
загружаются без проблем, если они вообще есть.

<html>
<
head>
<
title>test</title>
<
meta HTTP-EQUIV="content-type" content="text/html; charset=windows-1251">
</
head>

<
body>


<
form action='addtest.php' method='post' enctype="multipart/form-data">
<
table>
<? for ($i=1; $i<61; $i++)
{ ?>
<tr>
<
td><? echo $i;?> картинка</td>
<
td><input type="file" name="simg<?=$i;?>" value='' size="41"></td>
</
tr>
<
tr><td></td>
<
td><input type="text" name="alt<?=$i;?>" value='' size="41"></td>
</
tr>

<? } ?>
<tr><td></td>
<
td><input type=submit name="sbmt" value="Загрузить"></td>
</
tr>
</
table>
</
form>


<?
echo '<pre>'; print_r($_FILES); echo '</pre>';

for ($i=1; $i<61; $i++)
{

if (isset($_FILES["simg".$i]) and ($_POST['sbmt']=='Загрузить'))
{
$simg = $_FILES["simg".$i]["tmp_name"];
$simg_name = $_FILES["simg".$i]["name"];
$simg_size = $_FILES["simg".$i]["size"];
$simg_type = $_FILES["simg".$i]["type"];
$error_flag = $_FILES["simg".$i]["error"];

if($error_flag == 0)
{

$simg_name="g_".$i.".jpg";
$filename=$simg_name;
$simg_name='../gallery/'.$simg_name;
move_uploaded_file($simg, $simg_name);
$simg=chmod($simg_name,0644);
echo "картинка $i загружена<br>";
} // end of if 2
else echo "картинка $i не загружена<br>";

} // end of if 1

} // end for



?>

</body>

</
html>

Я загружал в отдельные поля до 20-го, в 20е, 21 и отдельные поля после 21-го

Результаты отладочной печати

Array
(
[
simg1] => Array
(
[
name] => g1_01.jpg
[type] => image/jpeg
[tmp_name] => /home/tmp/php0gYKB1
[error] => 0
[size] => 129781
)

[
simg2] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg3] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg4] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg5] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg6] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg7] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg8] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg9] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg10] => Array
(
[
name] => g1_01.jpg
[type] => image/jpeg
[tmp_name] => /home/tmp/phpwvAtnt
[error] => 0
[size] => 129781
)

[
simg11] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg12] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg13] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg14] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg15] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg16] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg17] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg18] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg19] => Array
(
[
name] =>
[
type] =>
[
tmp_name] =>
[
error] => 4
[size] => 0
)

[
simg20] => Array
(
[
name] => g1_08.jpg
[type] => image/jpeg
[tmp_name] => /home/tmp/phpGMEQAD
[error] => 0
[size] => 211307
)

)


После [simg20] массив отладки кончается.

Информация для пользователя (картинка такая-то загружена или картинка
не загрузилась - для пустых полей
картинка 1 загружена
картинка 2 не загружена
картинка 3 не загружена
картинка 4 не загружена
картинка 5 не загружена
картинка 6 не загружена
картинка 7 не загружена
картинка 8 не загружена
картинка 9 не загружена
картинка 10 загружена
картинка 11 не загружена
картинка 12 не загружена
картинка 13 не загружена
картинка 14 не загружена
картинка 15 не загружена
картинка 16 не загружена
картинка 17 не загружена
картинка 18 не загружена
картинка 19 не загружена
картинка 20 загружена

Тоже заканчивается на 20м файле

Спустя 51 минута, 15 секунд (14.08.2011 - 22:00) Invis1ble написал(а):
Ну это уже другое дело. Все четко видно. Только "картинка N (не)загружена" выводить не обязательно, это видно в дампе $_FILES (ключ error = 4 говорит о том, что файл не загружен) Единственное, совет на будущее - используй пробелы для отступов в коде вместо табуляции, обрати внимание - некоторые строки кода у тебя съезжают, из-за чего страдает читабельность.
Теперь по сути: где результат выполнения строки
var_dump(ini_get('max_file_uploads'));

о которой я написал в предыдущем посте?

Спустя 1 день, 25 минут, 18 секунд (15.08.2011 - 22:25) Alnr написал(а):
Выдает: string(2) "20"

Но, как я уже писал, я не загружал 20 фото, я загружал 1, 2, 5 фото в произвольном порядке, из разных полей, и проблемы были, начиная с 21 поля, даже если это было единственное фото.

Спустя 14 минут, 19 секунд (15.08.2011 - 22:40) Invis1ble написал(а):
Диалог уже длится 5-й день, в первом же своем посте я посоветовал попробовать увеличить это значение. Неужели так сложно проверить и отписаться о результатах? Возможно проблема решилась в первый же день.
ПС. Кстати, если что: после изменения значения необходимо перезагрузить сервер, чтобы изменения вступили в силу.

Спустя 1 день, 2 часа, 10 минут, 34 секунды (17.08.2011 - 00:50) Alnr написал(а):
Попробовать было не так просто т.к. на моём виртуальном хостинге эти значения нельзя с лёгкостью изменить. Сейчас поменяли, всё заработало, спасибо.

Спустя 1 час, 3 минуты, 3 секунды (17.08.2011 - 01:53) Invis1ble написал(а):
Ну слава яйцам smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.