Ситуация такая, что иногда приходится загружать на ломанные сервера большое кол-во файлов (когда по разным причинам нельзя работать с архивами). Собственно интересует сабж, нет ли у кого на примете чего-то такого удобного одним файлом?
прочитай тут http://www.softtime.ru/scripts/upload.php а тут http://paradigm.ru/2007/11/mass-upload с использованием flash P.S ответ: никак потому что input type='file' и поэтому придётся каждый файл отправлять по отдельности выбирая из списка. Только если сделать много инпут file с именами files[] и пользователь сам выберет все нужные файлы
вобщем нашел один вариант: http://www.uploadify.com/download/ Урезается до шести необходимых файлов, обеспечивающих мультизагрузку. Но всё равно многовато
Ну например нет доступа к командной строке и когда в php нет поддержки zlib я не в курсе как можно распаковать архив.
Светлый например, http://www.phpclasses.org/browse/package/4239.html Реализация распаковки нескольких видов архивов, включая tar, вроде сделанный на чистом пхп
http://demo.swfupload.org/v220/index.htm Вот что вам нужно 100%! Просто реализуется через flash - ajax. Сам постоянно использую. Не надо никаких архивов, просто выбираешь нужные файлы в любом количестве. ЗЫ: к сожалению одним файликом тут никак не обойтись. если только вытащить код флешки и запихнуть его в base_64 в тот-же файл.
PHP: <? $file = array(1 => "st.tar", 2 => "man.tar", 3 => "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() } } ?>
а что мешает сделать несколько input-ов типа file с разными именами а потом их просто обрабатывать на стороне сервера???
Я реализовывал подобную фишку на местном файлообменнике. За базу для мультиаплоада брался скрипт на JQ, называется UberUpload. Частично переписан, добавлены всякие украшательства. В принципе реализовать самый простой вариант не так сложно. На стороне клиента будет трудится простенький скрипт JS, привязанный на кнопочку "добавить файл". На стороне сервера простенькая обработка на PHP. Если интересует, могу попозже накидать пример.
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
b3, это не прикольно. с флеш аплодером можно добиться эффекта, когда пользователь выбирает сразу несколько файлов. вот это действительно удобно.
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 минут. Могу сделать под заказ.
И всю эту шоблу каждый раз по одному файлу лить? fokinkostya, суть в том, что кол-во файлов обычно 1000+, имена генерятся рандомно. Поэтому к сожалению тоже не вариант(
В идеале - заливаем небольшой файлик на сервер, открываем его через веб, выбираем скопом всё что надо залить, льём. В принципе не так уж принципиально будет файл один или 2-3-4, или большого размера. Главное чтобы стабильно заливал, не вываливался по таймауту и пр. Судя по всему разгадка в симбиозе php и flash