|
|
|
| Здрасте всем! У меня вопрос по уже избитой теме загрузки файлов. У меня есть скрипт, большой, в котором есть и текстовые и все остальные поля, включая и type="file". и вот тут есть такая странность, что если используется только одно поле файл с одним именем 'filename', то все работает прекрасно, но как только я пытаюсь закачать несколько файлов, изменив имя поля file на 'filename[]', все летит, т.е. никакого эффекта. Причем использовал и вроде работающие скрипты с форума, из одной из похожих тем. Не подскажете в чем может быть дело, может где-то есть запрет на закачку нескольких файлов?
Спасибо! | |
|
|
|
|
|
|
|
для: dimon
(18.09.2007 в 12:39)
| | покажи хоть пример чтоль :) и что меняешь. кусок кода | |
|
|
|
|
|
|
|
для: dimon
(18.09.2007 в 12:39)
| | у меня просто весь скрипт и форма довольно объёмные, поэтому только отрывки кода, которые я, в общем, описал словами:
<input name="item_pict_small[]" type="file" accept="image/jpeg" />
|
есть несколько таких полей, т.е. которые подразумевают создание скалярного массива. обрабатывается он так:
<?
if (isset($file)) {
for ($i=0;$i<count($item_pict_small); $i++){
if (move_uploaded_file($_FILES['item_pict_small'][$i]['tmp_name'],$image_dir_small_l.$_FILES['item_pict_small'][$i]['name']))
echo 'OK!';
else exit;
echo "<img alt=\"описание\" src=\"".$image_dir_small.$_FILES["item_pict_small"][$i]["name"]."\" border=\"0\" />";
if ($i<count($item_pict_small)-1) echo "\n".$hr."\n";} } }?>
|
Еще пробовал вариант с foreach, но тоже ничего не выходит...
Если делать тоже самое, но
<input name="item_pict_small" type="file" accept="image/jpeg" />
| (без "[]" в name) которое обрабатывается:
<?
if (isset($file)) {
if (move_uploaded_file($_FILES['item_pict_small']['tmp_name'],$image_dir_small_l.$_FILES['item_pict_small']['name']))
echo 'OK!';
else exit;
}?>
| , то все прекрасно работает.
Только что еще раз, на всякий случай проверил. Я не РНР гуру, но вроде как тут все верно, но допускаю, что мог чего и пропустить. Надеюсь кто-нибудь заметит, если что. Спасибо! | |
|
|
|
|
|
|
|
для: dimon
(18.09.2007 в 12:39)
| | это все затрудняются ответить, или тема опустилась слишком далеко вниз? просто нужно мнение и свежий взгляд знающих людей, а то я не совсем понимаю, в чем тут дело... | |
|
|
|
|
|
|
|
для: dimon
(19.09.2007 в 11:48)
| | Дело ещё в браузерах - помоему не все поддерживают загрузку нескольких файлов с одним и тем же именем на сервер. | |
|
|
|
|
|
|
|
для: cheops
(19.09.2007 в 11:58)
| | а разве это не работа РНР? он же обработчик на удалённом сервере, как браузер может влиять не его работу? или РНР "берет" нужные файлы через браузер? | |
|
|
|
|
|
|
|
для: dimon
(19.09.2007 в 12:13)
| | А чему у вас приравнена $item_pict_small? | |
|
|
|
|
|
|
|
для: sim5
(19.09.2007 в 13:09)
| | в смысле? я чего-то не понимаю? это ж переменная поля файл, т.е. я выбираю файл на своем локальном диске, и, если я использую одно поле, то все прокатывает, а если несколько полей с одним именем + "[ ]" (скалярный массив), то аблом.
Я не знаю, ответил я или нет на твой вопрос, но я все-таки не уверен, что его понял, сорри: новичок )) | |
|
|
|
|
|
|
|
для: dimon
(19.09.2007 в 14:22)
| |
<?php
if ( !isset( $_POST["upload"] ) )
{
echo '<form action="upload.php" method="post" enctype="multipart/form-data">';
echo 'Send these files:<br/>';
echo '<input type="file" name="userfile[]" /><br/>';
echo '<input type="file" name="userfile[]" /><br/>';
echo '<input type="submit" name="upload" value="Отправить файлы" />';
echo '</form>';
}
else
{
for ( $i=0; $i<count($_FILES['userfile']['name']); $i++ )
{
if ( empty($_FILES['userfile']['name'][$i]) ) continue;
if( move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $_FILES['userfile']['name'][$i]) )
echo "Файл ".$_FILES['userfile']['name'][$i]." успешно загружен<br/>";
else
echo "Ошибка при загрузке файла ".$_FILES['userfile']['name'][$i]."<br/>";
}
}
?>
|
Обрати внимание, как у меня
$_FILES['userfile']['tmp_name'][$i]
и у тебя
$_FILES['item_pict_small'][$i]['tmp_name'] | |
|
|
|
|
|
|
|
для: evgenijj
(19.09.2007 в 16:54)
| | Я [$i] ставил между именем переменной и атрибутом (надеюсь правильная терминология), потому что где-то тут же на форуме видел такие примеры... а может не на те смотрел)))
в любом случае спасибо... в этом и была загвоздка: в циклах for и foreach ключ нужно ставить в самом конце, а не где-то в центре, как у меня в первом коде, или как тут: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=42400 (кстати, так никто и не поправил там ошибки)... ладно, всем спасибо за участие. удачи! | |
|
|
|
|
|
|
|
для: dimon
(19.09.2007 в 14:22)
| | Ну во-первых установите register_globals в off и обращайтесь к суперглобальному массиву $_FILES. Во-вторых, если вы выведите в браузер count($_FILES['pict']), то сможете заметить, что число не будет равно числу загружаемых файлов. Вот пример для проверки загрузки на сервер (возьмете то, что вам нужно будет):
<form action="" method="post" enctype="multipart/form-data">
<input name="pict[]" type="file">
<input name="pict[]" type="file">
<input name="pict[]" type="file">
<input type="submit" name="sendfile" value="GO">
</form>
<?
if (isset($_POST['sendfile'])) {
$num = count($_FILES['pict']['name']);
$s = '';
for ($i = 0; $i < $num; $i++) {
$f = move_uploaded_file($_FILES['pict']['tmp_name'][$i],$_FILES['pict']['name'][$i]);
if ($f)
$s .= $_FILES['pict']['name'][$i].' - размер: '.$_FILES['pict']['size'][$i].' байт<br>';
}
echo $s;
}
?>
|
| |
|
|
|
|
|
|
|
для: dimon
(19.09.2007 в 12:13)
| | >а разве это не работа РНР? он же обработчик на удалённом сервере, как браузер может влиять
>не его работу? или РНР "берет" нужные файлы через браузер?
PHP работает на сервере, обмен файлов осуществляет браузер и Apache. | |
|
|
|