Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка нескольких файлов
 
 автор: worker   (16.09.2005 в 18:17)   письмо автору
 
 

Вот форма:

<form action=upload_2.php method=post enctype=multipart/form-data>
    Имя файла: <input name="userfile[]" type="file"><br>
    Имя файла: <input name="userfile[]" type="file"><br>
    <input type=submit value='Закачать'>
    </form>

Вот скрипт:

<?
$dir 
"../local/";
foreach(
$userfile as $key=>$value)
{
        echo 
$_FILES['userfile']['tmp_name']['$key'];
//echo $key.'=>'.$value.'<br>';
if(is_uploaded_file($_FILES['userfile']['tmp_name']['$key']))
   {
   
$res move_uploaded_file($_FILES['userfile']['tmp_name']['$key'], $dir.$_FILES['userfile']['name']['$key']);
   echo 
"Файл успешно закачан в ".$dir.$_FILES["userfile"]["name"];
   }
else echo 
"Ошибка записи файла!";
}
?>

Не пойму в чем ошибка, может есть другие варианты. Я в этом вообще мало разбираюсь, так что помогите, что я не так передаю.

   
 
 автор: cheops   (16.09.2005 в 19:34)   письмо автору
 
   для: worker   (16.09.2005 в 18:17)
 

Так а вы подставляёте вместо $userfile $_FILES['userfile']['tmp_name']
<? 
$dir 
"../local/"
foreach(
$_FILES['userfile']['tmp_name'] as $key=>$value

        echo 
$value
//echo $key.'=>'.$value.'<br>'; 
if(is_uploaded_file($value)) 
   { 
   
$res move_uploaded_file($value$dir.$_FILES['userfile']['name']['$key']); 
   echo 
"Файл успешно закачан в ".$dir.$_FILES["userfile"]["name"]['$key']; 
   } 
else echo 
"Ошибка записи файла!"

?>

   
 
 автор: worker   (16.09.2005 в 21:13)   письмо автору
 
   для: cheops   (16.09.2005 в 19:34)
 

Вы конечно всё верно сказали, но у меня выдает ошибку:

C:\WINDOWS\TEMP\php34.tmp
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\TEMP\php34.tmp' to '' in H:\www\administrator_page\my_php_book\chapter16\162\upload_2.php on line 9
Ошибка записи файла!

Хотя как Вы понимаете все права на запись в эту дирректорию даны

   
 
 автор: cheops   (16.09.2005 в 21:41)   письмо автору
 
   для: worker   (16.09.2005 в 21:13)
 

Он почему-то собака считает, что $dir.$_FILES['userfile']['name']['$key'] - пустая строка, попробуйте вывести дамп массива $_FILES
<?php
  
echo "<pre>";
  
print_r($_FILES);
  echo 
"</pre>";
?>

В нём имена есть? Выведите также значение $key - в него значения ключей вводятся?

   
 
 автор: worker   (16.09.2005 в 22:28)   письмо автору
 
   для: cheops   (16.09.2005 в 21:41)
 

Выдает вот такую занятную штуку, очень интересная штука:

Array
(
    [userfile] => Array
        (
            [name] => Array
                (
                    [0] => 123.jpg
                    [1] => 
                )

            [type] => Array
                (
                    [0] => image/pjpeg
                    [1] => 
                )

            [tmp_name] => Array
                (
                    [0] => C:\WINDOWS\TEMP\php98.tmp
                    [1] => 
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 4
                )

            [size] => Array
                (
                    [0] => 45734
                    [1] => 0
                )

        )

)


   
 
 автор: worker   (16.09.2005 в 23:00)   письмо автору
 
   для: worker   (16.09.2005 в 22:28)
 

Переписываю для наглядности и смотрю результат:

<?
$dir 
"../162/";
foreach(
$_FILES['userfile']['tmp_name'] as $key=>$value)
{
echo 
'<br>ключ '.$key;
echo 
'<br>масив '.$value;

echo 
'<br>масив файла:'.is_uploaded_file($value).'-'.$key;
echo 
move_uploaded_file($value$dir.$_FILES['userfile']['name'].$key);
   echo 
"<br>Файл успешно закачан в ".$dir.$_FILES["userfile"]["name"].$key;
}
?>

И вижу вот такой вывод:

ключ 0
масив C:\WINDOWS\TEMP\phpE3.tmp
масив файла:1-01
Файл успешно закачан в ../162/Array0
ключ 1
масив C:\WINDOWS\TEMP\phpE4.tmp
масив файла:1-11
Файл успешно закачан в ../162/Array1


Хмм... так в чем же дело, почему он не переименовывает загруженные файлы их собственными именами. мда...

   
 
 автор: worker   (17.09.2005 в 00:24)   письмо автору
 
   для: worker   (16.09.2005 в 23:00)
 

Я даже в инете искал подобный скрипт, но почему-то не нашел, странно....

   
 
 автор: cheops   (17.09.2005 в 01:21)   письмо автору
 
   для: worker   (16.09.2005 в 22:28)
 

Так а у вас же только один файл - видите второй элемент пустой - проверяйте в цикле - не является ли очередной элмемент массива пустышкой.

   
 
 автор: worker   (17.09.2005 в 02:32)   письмо автору
 
   для: cheops   (17.09.2005 в 01:21)
 

Дак а вы гляньте на последний скрипт, там я передаю 2 файла, и оба загружаются с именами Array0 и Array1 ну а почему не натуральные имена приходят ????

   
 
 автор: cheops   (17.09.2005 в 12:48)   письмо автору
 
   для: worker   (17.09.2005 в 02:32)
 

Так а почему вы используете
<?php
$dir
.$_FILES['userfile']['name'].$key
?>

вместо
<?php
$dir
.$_FILES['userfile']['name'][$key]
?>

$_FILES['userfile']['name'] - это массив, поэтому у вас в результате получаются Array0 и Array1.

   
 
 автор: worker   (17.09.2005 в 15:15)   письмо автору
 
   для: cheops   (17.09.2005 в 12:48)
 

Большое спасибо, вот я идиот, я ['$key'] заключал в кавычки, соответственно он не работал. вот спасибо.
вот мои скриты, может кому сгодится, т.к. я в инете искал так и не нашел.
Форма загрузки

<form action=up.php method=post enctype=multipart/form-data>
    Имя файла: <input name="userfile[]" type="file"><br>
    Имя файла: <input name="userfile[]" type="file"><br>
    Имя файла: <input name="userfile[]" type="file"><br>
    Имя файла: <input name="userfile[]" type="file"><br>
    <input type=submit value='Закачать'>
</form>

и скрипт обработки up.php :

<?
$dir 
"../999/";
foreach(
$_FILES['userfile']['tmp_name'] as $key=>$value)
{
if(empty(
$value)) break;
is_uploaded_file($value);
move_uploaded_file($value$dir.$_FILES['userfile']['name'][$key]);
echo 
"<br>Файл успешно закачан в ".$dir.$_FILES["userfile"]["name"][$key];
}
?>

Чеопсу ОГРОМНАЯ БЛАГОДАРНОСТЬ, уже в который раз.

   
 
 автор: cheops   (17.09.2005 в 18:13)   письмо автору
 
   для: worker   (17.09.2005 в 15:15)
 

В русской транслитации лучше использовать вариант Хеопс, а не Чеопс :)))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования