Скрипт массовой загрузки файлов на сервер.

Discussion in 'PHP' started by Светлый, 20 Feb 2010.

  1. Светлый

    Светлый Elder - Старейшина

    Joined:
    28 Jun 2007
    Messages:
    159
    Likes Received:
    47
    Reputations:
    46
    Ситуация такая, что иногда приходится загружать на ломанные сервера большое кол-во файлов (когда по разным причинам нельзя работать с архивами). Собственно интересует сабж, нет ли у кого на примете чего-то такого удобного одним файлом?
     
  2. shell_c0de

    shell_c0de Hack All World

    Joined:
    7 Jul 2009
    Messages:
    1,185
    Likes Received:
    618
    Reputations:
    690
    прочитай тут http://www.softtime.ru/scripts/upload.php
    а тут http://paradigm.ru/2007/11/mass-upload с использованием flash
    P.S ответ: никак потому что input type='file' и поэтому придётся каждый файл отправлять по отдельности выбирая из списка.
    Только если сделать много инпут file с именами files[] и пользователь сам выберет все нужные файлы
     
    _________________________
  3. Светлый

    Светлый Elder - Старейшина

    Joined:
    28 Jun 2007
    Messages:
    159
    Likes Received:
    47
    Reputations:
    46

    Я имел ввиду скрипт, где средствами JS или AJAX реализована передача имен файлов.
     
  4. Светлый

    Светлый Elder - Старейшина

    Joined:
    28 Jun 2007
    Messages:
    159
    Likes Received:
    47
    Reputations:
    46
    вобщем нашел один вариант: http://www.uploadify.com/download/

    Урезается до шести необходимых файлов, обеспечивающих мультизагрузку. Но всё равно многовато :(
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Светлый приведите реальный пример, когда действительно нельзя использовать архивы
     
    _________________________
  6. Светлый

    Светлый Elder - Старейшина

    Joined:
    28 Jun 2007
    Messages:
    159
    Likes Received:
    47
    Reputations:
    46

    Ну например нет доступа к командной строке и когда в php нет поддержки zlib я не в курсе как можно распаковать архив.
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Светлый например, http://www.phpclasses.org/browse/package/4239.html Реализация распаковки нескольких видов архивов, включая tar, вроде сделанный на чистом пхп
     
    _________________________
    1 person likes this.
  8. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    http://demo.swfupload.org/v220/index.htm
    Вот что вам нужно 100%!
    Просто реализуется через flash - ajax. Сам постоянно использую. Не надо никаких архивов, просто выбираешь нужные файлы в любом количестве.

    ЗЫ: к сожалению одним файликом тут никак не обойтись.
    если только вытащить код флешки и запихнуть его в base_64 в тот-же файл.
     
    1 person likes this.
  9. [ac1D]

    [ac1D] Banned

    Joined:
    6 Dec 2009
    Messages:
    44
    Likes Received:
    27
    Reputations:
    0
    PHP:
    <?
    $file = array(=> "st.tar"=> "man.tar"=> "sd.tar");
    for (
    $i=1;$i<=3;$i++) {
    system("wget google.com/tools/".file[$i]);
    if (
    file_exists($file[$i])) {
    $dir str_replace(basename(__file__),"",__file);
    echo 
    "$file[$i] is downloaded to $dir";
    flush()
    }
    }
    ?>
     
  10. dr.Web

    dr.Web Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    22
    Reputations:
    10
    а что мешает сделать несколько input-ов типа file с разными именами а потом их просто обрабатывать на стороне сервера???
     
  11. fokinkostya

    fokinkostya New Member

    Joined:
    28 Feb 2010
    Messages:
    1
    Likes Received:
    4
    Reputations:
    0
    Я реализовывал подобную фишку на местном файлообменнике. За базу для мультиаплоада брался скрипт на JQ, называется UberUpload. Частично переписан, добавлены всякие украшательства. В принципе реализовать самый простой вариант не так сложно.

    На стороне клиента будет трудится простенький скрипт JS, привязанный на кнопочку "добавить файл". На стороне сервера простенькая обработка на PHP. Если интересует, могу попозже накидать пример.
     
  12. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    fokinkostya, только на javascript? Без флеша? интересует!
     
  13. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    http://valums.com/ajax-upload/
    http://valums.com/wp-content/uploads/ajax-upload/demo-jquery.htm

    http://ajaxuploader.com/Demo/select-multiple-files-upload.aspx
     
    #13 b3, 3 Mar 2010
    Last edited: 3 Mar 2010
  14. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    b3, это не прикольно. с флеш аплодером можно добиться эффекта, когда пользователь выбирает сразу несколько файлов. вот это действительно удобно.
     
  15. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    Byte_
    а это чем не подходит?
    http://ajaxuploader.com/Demo/select-multiple-files-upload.aspx
     
  16. fokinkostya

    fokinkostya New Member

    Joined:
    28 Feb 2010
    Messages:
    1
    Likes Received:
    4
    Reputations:
    0
    PHP:
    <?php
    if(is_array($_FILES)){
        
    $f_sel 0;
        while (list (
    $key$value) = each ($_FILES)){
            if (
    gettype($value) == 'array'){
                while (list (
    $key_2$value_2) = each ($value)){
                    
    $files[$f_sel][$key_2] = $value_2;
                }
            }
            
    $f_sel++;
        }
        @
    reset($_FILES);
    }
    if (
    count($files) == 1){
        if (
    $files[0]['error'] == 0){        // Проверяем размер
            
    echo $files[0]['tmp_name'].'<br />';
        }
    }
    // Если файлов несколько
    elseif (count($files) > 1){
        
    $count count($files);
        
    // Обрабатываем файлы циклом
        
    for ($sel 0$sel $count$sel++){        // Если файл залился без ошибок, обрабатываем
            
    if ($files[$sel]['error'] == 0){
                echo 
    $files[$sel]['tmp_name'].'<br />';
            }
        }
    }


    ?>

    <html>
    <head>
      <title>Мульти загрузка</title>
    </head>
    <style type="text/css">

    </style>
    <script type="text/javascript">
    function addFile() {
        var d = new Date();
        var span = newEl('span');
        span.id = d.getTime();
        span.style.display = 'block';
        var input = newEl('input');
        input.type = 'file';
        input.name = 'file'+d.getTime();
        span.appendChild(input);
        var div = getEl('multiUpload');
        div.appendChild(span);
    }

    function newEl (type) {
        return document.createElement(type);
    }

    function getEl (id) {
        return document.getElementById(id);
    }
    </script>

    <body>
    <input type="button" value="Add file" onClick="addFile();">
    <form action="upload.php" method="post" enctype="multipart/form-data">
    <div id="multiUpload" style="display: block;">
    </div>
    <div>
    <input type="submit" value="Send">
    </div>
    </form>
    <script type="text/javascript">addFile();</script>
    </body>
    </html>
    Как то так... Накалякал за 10 минут.

    Могу сделать под заказ.
     
  17. Светлый

    Светлый Elder - Старейшина

    Joined:
    28 Jun 2007
    Messages:
    159
    Likes Received:
    47
    Reputations:
    46
    И всю эту шоблу каждый раз по одному файлу лить? :)

    fokinkostya, суть в том, что кол-во файлов обычно 1000+, имена генерятся рандомно. Поэтому к сожалению тоже не вариант(
     
    #17 Светлый, 4 Mar 2010
    Last edited: 4 Mar 2010
  18. fokinkostya

    fokinkostya New Member

    Joined:
    28 Feb 2010
    Messages:
    1
    Likes Received:
    4
    Reputations:
    0
    Ну дык ты задачу опиши, может чего и придет в голову.
     
  19. Светлый

    Светлый Elder - Старейшина

    Joined:
    28 Jun 2007
    Messages:
    159
    Likes Received:
    47
    Reputations:
    46
    В идеале - заливаем небольшой файлик на сервер, открываем его через веб, выбираем скопом всё что надо залить, льём. В принципе не так уж принципиально будет файл один или 2-3-4, или большого размера. Главное чтобы стабильно заливал, не вываливался по таймауту и пр.
    Судя по всему разгадка в симбиозе php и flash
     
  20. fokinkostya

    fokinkostya New Member

    Joined:
    28 Feb 2010
    Messages:
    1
    Likes Received:
    4
    Reputations:
    0
    Скорее всего.
    Потому что я не слышал о возможности выбора нескольких файлов стандартными средствами.