За последние 24 часа нас посетили 54120 программистов и 1719 роботов. Сейчас ищут 859 программистов ...

Загрузка файлов на сервер

Тема в разделе "PHP для новичков", создана пользователем paqwerty, 7 фев 2008.

Статус темы:
Закрыта.
  1. paqwerty

    paqwerty Активный пользователь

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Всем привет.
    У меня стоит задача - загрузка нескоьлких файлов одновремеено на сервер. Только вот не могу я залить больше одного файла, помогите плиз.

    Вот код формы в частности:
    Код (Text):
    1.  
    2. <form action="feedback.php" method="post" enctype="multipart/form-data">
    3. <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    4. <input type="file" name="picture1" /><br />
    5. <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    6. <input type="file" name="picture2" /><br />
    7. <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    8. <input type="file" name="picture3" /><br />
    9. <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    10. <input type="file" name="picture4" /><br />
    11. <input name="goto" value="отправить" type="submit"> <input value="сброс" type="reset">
    12. </form>
    А вот код обработчика формы:
    Код (Text):
    1.  
    2. $array[] = $_POST['picture1'];
    3. $array[] = $_POST['picture2'];
    4. $array[] = $_POST['picture3'];
    5. $array[] = $_POST['picture4'];
    6. $fot=implode(" ",$array);
    7. $uploaddir = '/name/name/name/';
    8. $uploadfile = $uploaddir . basename($_FILES['$fot']['name']);
    9.  
    10. print "<pre>";
    11. if (move_uploaded_file($_FILES['$fot']['tmp_name'], $uploadfile)) {
    12.     print "File is valid, and was successfully uploaded. ";
    13.     print "Here's some more debugging info:\n";
    14.     print_r($_FILES);
    15. } else {
    16.     print "Possible file upload attack!  Here's some debugging info:\n";
    17.     print "Possible file upload attack!  Дополнительная отладочная информация:\n";
    18.     print_r($_FILES);
    19. }
    20. print "</pre>";
    С помощью выше написанного обработчика не загружает, загружает только один файл и то при след. коде:

    Код (Text):
    1.  
    2. $uploaddir = '/name/name/name/';
    3. $uploadfile = $uploaddir . basename($_FILES['picture1']['name']);
    4.  
    5. print "<pre>";
    6. if (move_uploaded_file($_FILES['picture1']['tmp_name'], $uploadfile)) {
    7.     print "File is valid, and was successfully uploaded. ";
    8.     print "Here's some more debugging info:\n";
    9.     print_r($_FILES);
    10. } else {
    11.     print "Possible file upload attack!  Here's some debugging info:\n";
    12.     print "Possible file upload attack!  Дополнительная отладочная информация:\n";
    13.     print_r($_FILES);
    14. }
    15. print "</pre>";
     
  2. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Ошибки?
     
  3. paqwerty

    paqwerty Активный пользователь

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Да, он мне выдает сообщения после else и ничего не заливает на сервер, хотя код ошибки пишет "0"(т.е. все файлы залиты нормально)
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    ?
     
  5. paqwerty

    paqwerty Активный пользователь

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Ну это вроде как переменная массива. А что не так?
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    дак а ты уверен, что там хоть что-то есть?
    PHP:
    1. <?php
    2. print $_FILES['$fot']['tmp_name'];
     
  7. paqwerty

    paqwerty Активный пользователь

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Вот что он мне дает:

    Possible file upload attack! Here's some debugging info:
    Possible file upload attack! Дополнительная отладочная информация:
    Array
    (
    [picture1] => Array
    (
    [name] => 0-7.JPG
    [type] => image/jpeg
    [tmp_name] => /hsphere/local/home/vykupaut/tmp/phpreNwGt
    [error] => 0
    [size] => 15591
    )

    [picture2] => Array
    (
    [name] => YAVA.jpg
    [type] => image/jpeg
    [tmp_name] => /hsphere/local/home/vykupaut/tmp/phpS551BO
    [error] => 0
    [size] => 24503
    )

    [picture3] => Array
    (
    [name] => Копия superstar_02.jpg
    [type] => image/jpeg
    [tmp_name] => /hsphere/local/home/vykupaut/tmp/phpj7gDx9
    [error] => 0
    [size] => 12803
    )

    [picture4] => Array
    (
    [name] => Копия cowk315.jpg
    [type] => image/jpeg
    [tmp_name] => /hsphere/local/home/vykupaut/tmp/php6lritu
    [error] => 0
    [size] => 7270
    )

    )

    Наверное есть
     
  8. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Выполни мой код перед тем как вызываешь move_uploaded_file.
     
  9. paqwerty

    paqwerty Активный пользователь

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Выполнил, ничего не происходит?????
     
  10. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    http://440hz.ru/trash/files/

    лей хоть 100 сразу

    PHP:
    1.  
    2. <?php
    3.  
    4. // 2008 440hz
    5.  
    6. if(count($_FILES)) {
    7.     print('<pre>');
    8.     print_r($_FILES);
    9. }
    10.  
    11. ?>
    12. <html>
    13. <script>
    14.  
    15. function dropFile(btn){
    16.     if(document.getElementById) {
    17.         tr = btn;
    18.         while (tr.tagName != 'TR') tr = tr.parentNode;
    19.         tr.parentNode.removeChild(tr);
    20.         checkForLast();
    21.     }
    22. }
    23. function addFile(btn){
    24.     if(document.getElementById) {
    25.         tr = btn;
    26.         while (tr.tagName != 'TR') tr = tr.parentNode;
    27.         var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
    28.         thisChilds = newTr.getElementsByTagName('td');
    29.         for (var i = 0; i < thisChilds.length; i++){
    30.             if (thisChilds[i].className == 'header') thisChilds[i].innerHTML = '';
    31.             if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="fl[]" type="file">';
    32.         }
    33.         checkForLast();
    34.     }
    35. }
    36. function checkForLast(){
    37.     btns = document.getElementsByName('drop');
    38.     for (i = 0; i < btns.length; i++){
    39.         btns[i].disabled = (btns.length == 1) ? true : false;
    40.     }
    41. }
    42.  
    43. </script>
    44. <body onload="checkForLast();">
    45. <form action="./" method="POST" ENCTYPE="multipart/form-data">
    46. <TABLE cellSpacing=0 cellPadding=4 >
    47. <TD ><INPUT type=file size=32 name="fl[]"></TD>
    48. <TD noWrap><INPUT onclick=dropFile(this); type=button value=" - " name=drop><INPUT onclick=addFile(this); type=button value=" + "></TD>
    49. </TABLE>
    50. <input type="submit" value="отправить">
    51. </form>
    52. </body>
    53. </html>
     
  12. paqwerty

    paqwerty Активный пользователь

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    440Hz спасибо вам, но тут надо пхп
     
  13. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    вот, что ты тут делаешь?
     
  14. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    :shock: :lol:

    жесть!

    Код:
    Код (Text):
    1.  
    2. $array[] = $_POST['picture1'];    <----|
    3. $array[] = $_POST['picture2'];    <----|  здесь файлов нет и небыло!
    4. $array[] = $_POST['picture3'];    <----|
    5. $array[] = $_POST['picture4'];    <----|
    6. $fot=implode(" ",$array);       <------------------ ЧТОЭТО ТАКОЕ ЗАЧЕМ ???
    7. $uploaddir = '/name/name/name/';
    8. $uploadfile = $uploaddir . basename($_FILES['$fot']['name']);    <---- Разве так обращаются к елементу массива
    9.  
    10. и вообще откуда вдруг взялся этот елемент ????
    11.  
    12. print "<pre>";
    13. if (move_uploaded_file($_FILES['$fot']['tmp_name'], $uploadfile)) {  <--- и снова откуда ?  если ты программист или даже только учишся - просто включи мозг!
    14.     print "File is valid, and was successfully uploaded. ";
    15.     print "Here's some more debugging info:\n";
    16.     print_r($_FILES);
    17. } else {
    18.     print "Possible file upload attack!  Here's some debugging info:\n";
    19.     print "Possible file upload attack!  Дополнительная отладочная информация:\n";
    20.     print_r($_FILES);
    21. }
    22. print "</pre>";
    23.  
    24.  
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    файлы передаются в массиве $_FILES, о чем в моем примере можно посмтреть.
     
  16. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Стойте! Объясните мне, человеку, который сидит в инете на скорости 128Kbit - а зачем нужно одновременно загружать кучу файлов на сайт?
    Вот на яндекс.фотках - можно с одной страницы загрузить хоть 100 файлов по 3 метра - они все там по очереди и загрузятся, каждый с максимальной скоростью канала.
     
  17. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    RomanBush, потому что проще. Импортное слово "юзабильнее" в самую точку. Показал кучу файлов и иди пить чай пока грузяться они, в противном случае чая тебе не видать, ибо придётся циклично выполнять действия "указал->жди->загрузил". Никакой романтики.
     
  18. Штаны

    Штаны Guest

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

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Исчо раз повторю - глянь яндекс.фотки. Там как раз и сделано - показал десятка два файлов, каждый по 2-3 метра, тыкнул кнопочку и лёг спать - с моей скоростью к утру они как раз рагрузятся.
     
  20. forint

    forint Активный пользователь

    С нами с:
    7 фев 2008
    Сообщения:
    26
    Симпатии:
    0
    ребят я вот с примерной проблеммой столкнулся ..
    но у меня задача проверки самого загружаемого файла..


    PHP:
    1. <?
    2. $valid_types        =  array("xlc","clv", "xls", "jpeg");
    3.     if (isset($_FILES["userfile"])) {
    4.     if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    5.         $filename = $_FILES['userfile']['tmp_name'];
    6.         $ext = substr($_FILES['userfile']['name'],
    7.             1 + strrpos($_FILES['userfile']['name'], "."));
    8.          if (!in_array($ext, $valid_types)) {
    9.             echo 'Error: Invalid file type.';
    10.         } else {
    11.                   if (@move_uploaded_file($filename, "/2/")) {
    12.                     echo 'File загружен ';
    13.                 } else {
    14.                     echo 'Error: не прокатило.=( .';
    15.                 }
    16.             }
    17.         }
    18.     } else {
    19.         echo "Error: empty file.";
    20.     }
    21.   {
    22.     echo  '
    23.     <form enctype="multipart/form-data" method="post">
    24.     <input type="hidden" name="MAX_FILE_SIZE" value="64000">
    25.     Send this file: <input name="userfile" type="file">
    26.     <input type="submit" value="Send File">
    27.     </form>';
    28. }
    29. ?>
    как видете сделал по расширению , но все равно ругает ..
    в чем ошибка ?? я уже свои глупые глаза сломал ...
    и кстати подскажите еще варианты проверки загружаемого файла, а именон xls .
     
  21. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Во-первых, если выдает ошибку, то, как правило, пишет и строку с ошибкой. Обратите на нее внимание. И называйте эту строку, когда даете код нам.
    Во-вторых, что у Вас в строках 20-21 ?
    (Остальное не посмотрел)
     
  22. forint

    forint Активный пользователь

    С нами с:
    7 фев 2008
    Сообщения:
    26
    Симпатии:
    0
    спасибо за коттику, вобщем
    в строчке 20 и 21 удалил лишние ковычки .. хотя я не считаю их лишними .. так как тепербь не выводится форма после вывода ошибки ..
    а ошибка выглядит так ..

    HTML:
    1. Error: не прокатило.=( .
     
  23. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Это не кавычки, а фигурные скобки :)
    И почему должна выводиться форма? Посмотрите, в каком блоке находится форма и в каком текст с ошибкой. Они не могут вместе выводиться.
    Выход:
    1) Сделать редирект в случае ошибки (на эту же страницу)
    2) Загнать форму в переменную. И выдавать по необходимости.
     
  24. forint

    forint Активный пользователь

    С нами с:
    7 фев 2008
    Сообщения:
    26
    Симпатии:
    0
    ну это то понятно , не проблема , но файл то все равно не заливается = ))
    кто нить укажите на ошибку...
    просто залить его не трабл , но там же проверка ещё идет на расширение .. и кстати скрипт проходит её (проверку)
    и потом уже п гдето затыкается , если я правильно понял ..
     
  25. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Этого знака быть не должно, т.к функция возвращает false в случае неудачи. А у стоит знак - @.
    Если нет директории - сразу увидите - тогда выдаст ошибку (Она есть, кстати?).

    substr - если уж плюсовать в функции, то брать вычисления в скобки (). Так надежней ИМХО.

    Поставьте error_reporting(E_ALL) в начало скрипта.

    Пока ничего странного не замечаю в скрипте, проверять не очень хочется сейчас.
     
Статус темы:
Закрыта.