Всем привет. У меня стоит задача - загрузка нескоьлких файлов одновремеено на сервер. Только вот не могу я залить больше одного файла, помогите плиз. Вот код формы в частности: Код (Text): <form action="feedback.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" name="picture1" /><br /> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" name="picture2" /><br /> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" name="picture3" /><br /> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" name="picture4" /><br /> <input name="goto" value="отправить" type="submit"> <input value="сброс" type="reset"> </form> А вот код обработчика формы: Код (Text): $array[] = $_POST['picture1']; $array[] = $_POST['picture2']; $array[] = $_POST['picture3']; $array[] = $_POST['picture4']; $fot=implode(" ",$array); $uploaddir = '/name/name/name/'; $uploadfile = $uploaddir . basename($_FILES['$fot']['name']); print "<pre>"; if (move_uploaded_file($_FILES['$fot']['tmp_name'], $uploadfile)) { print "File is valid, and was successfully uploaded. "; print "Here's some more debugging info:\n"; print_r($_FILES); } else { print "Possible file upload attack! Here's some debugging info:\n"; print "Possible file upload attack! Дополнительная отладочная информация:\n"; print_r($_FILES); } print "</pre>"; С помощью выше написанного обработчика не загружает, загружает только один файл и то при след. коде: Код (Text): $uploaddir = '/name/name/name/'; $uploadfile = $uploaddir . basename($_FILES['picture1']['name']); print "<pre>"; if (move_uploaded_file($_FILES['picture1']['tmp_name'], $uploadfile)) { print "File is valid, and was successfully uploaded. "; print "Here's some more debugging info:\n"; print_r($_FILES); } else { print "Possible file upload attack! Here's some debugging info:\n"; print "Possible file upload attack! Дополнительная отладочная информация:\n"; print_r($_FILES); } print "</pre>";
Да, он мне выдает сообщения после else и ничего не заливает на сервер, хотя код ошибки пишет "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 ) ) Наверное есть
теперь фтыкай, что делает implode. Как работать со строками http://php.net/string и что принимает в качестве параметров move_uploaded_file.
http://440hz.ru/trash/files/ лей хоть 100 сразу PHP: <?php // 2008 440hz if(count($_FILES)) { print('<pre>'); print_r($_FILES); } ?> <html> <script> function dropFile(btn){ if(document.getElementById) { tr = btn; while (tr.tagName != 'TR') tr = tr.parentNode; tr.parentNode.removeChild(tr); checkForLast(); } } function addFile(btn){ if(document.getElementById) { tr = btn; while (tr.tagName != 'TR') tr = tr.parentNode; var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling); thisChilds = newTr.getElementsByTagName('td'); for (var i = 0; i < thisChilds.length; i++){ if (thisChilds[i].className == 'header') thisChilds[i].innerHTML = ''; if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="fl[]" type="file">'; } checkForLast(); } } function checkForLast(){ btns = document.getElementsByName('drop'); for (i = 0; i < btns.length; i++){ btns[i].disabled = (btns.length == 1) ? true : false; } } </script> <body onload="checkForLast();"> <form action="./" method="POST" ENCTYPE="multipart/form-data"> <TABLE cellSpacing=0 cellPadding=4 > <TD ><INPUT type=file size=32 name="fl[]"></TD> <TD noWrap><INPUT onclick=dropFile(this); type=button value=" - " name=drop><INPUT onclick=addFile(this); type=button value=" + "></TD> </TABLE> <input type="submit" value="отправить"> </form> </body> </html>
:shock: :lol: жесть! Код: Код (Text): $array[] = $_POST['picture1']; <----| $array[] = $_POST['picture2']; <----| здесь файлов нет и небыло! $array[] = $_POST['picture3']; <----| $array[] = $_POST['picture4']; <----| $fot=implode(" ",$array); <------------------ ЧТОЭТО ТАКОЕ ЗАЧЕМ ??? $uploaddir = '/name/name/name/'; $uploadfile = $uploaddir . basename($_FILES['$fot']['name']); <---- Разве так обращаются к елементу массива и вообще откуда вдруг взялся этот елемент ???? print "<pre>"; if (move_uploaded_file($_FILES['$fot']['tmp_name'], $uploadfile)) { <--- и снова откуда ? если ты программист или даже только учишся - просто включи мозг! print "File is valid, and was successfully uploaded. "; print "Here's some more debugging info:\n"; print_r($_FILES); } else { print "Possible file upload attack! Here's some debugging info:\n"; print "Possible file upload attack! Дополнительная отладочная информация:\n"; print_r($_FILES); } print "</pre>";
Стойте! Объясните мне, человеку, который сидит в инете на скорости 128Kbit - а зачем нужно одновременно загружать кучу файлов на сайт? Вот на яндекс.фотках - можно с одной страницы загрузить хоть 100 файлов по 3 метра - они все там по очереди и загрузятся, каждый с максимальной скоростью канала.
RomanBush, потому что проще. Импортное слово "юзабильнее" в самую точку. Показал кучу файлов и иди пить чай пока грузяться они, в противном случае чая тебе не видать, ибо придётся циклично выполнять действия "указал->жди->загрузил". Никакой романтики.
RomanBush, наверно потому, что многопоточная загрузка полнее использует пропускную способность канала, плюс если по какому-то коннекту произошел сбой и пока система это выкупит, другие будут грузиться.
Исчо раз повторю - глянь яндекс.фотки. Там как раз и сделано - показал десятка два файлов, каждый по 2-3 метра, тыкнул кнопочку и лёг спать - с моей скоростью к утру они как раз рагрузятся.
ребят я вот с примерной проблеммой столкнулся .. но у меня задача проверки самого загружаемого файла.. PHP: <? $valid_types = array("xlc","clv", "xls", "jpeg"); if (isset($_FILES["userfile"])) { if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { $filename = $_FILES['userfile']['tmp_name']; $ext = substr($_FILES['userfile']['name'], 1 + strrpos($_FILES['userfile']['name'], ".")); if (!in_array($ext, $valid_types)) { echo 'Error: Invalid file type.'; } else { if (@move_uploaded_file($filename, "/2/")) { echo 'File загружен '; } else { echo 'Error: не прокатило.=( .'; } } } } else { echo "Error: empty file."; } { echo ' <form enctype="multipart/form-data" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="64000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form>'; } ?> как видете сделал по расширению , но все равно ругает .. в чем ошибка ?? я уже свои глупые глаза сломал ... и кстати подскажите еще варианты проверки загружаемого файла, а именон xls .
Во-первых, если выдает ошибку, то, как правило, пишет и строку с ошибкой. Обратите на нее внимание. И называйте эту строку, когда даете код нам. Во-вторых, что у Вас в строках 20-21 ? (Остальное не посмотрел)
спасибо за коттику, вобщем в строчке 20 и 21 удалил лишние ковычки .. хотя я не считаю их лишними .. так как тепербь не выводится форма после вывода ошибки .. а ошибка выглядит так .. HTML: Error: не прокатило.=( .
Это не кавычки, а фигурные скобки И почему должна выводиться форма? Посмотрите, в каком блоке находится форма и в каком текст с ошибкой. Они не могут вместе выводиться. Выход: 1) Сделать редирект в случае ошибки (на эту же страницу) 2) Загнать форму в переменную. И выдавать по необходимости.
ну это то понятно , не проблема , но файл то все равно не заливается = )) кто нить укажите на ошибку... просто залить его не трабл , но там же проверка ещё идет на расширение .. и кстати скрипт проходит её (проверку) и потом уже п гдето затыкается , если я правильно понял ..
Этого знака быть не должно, т.к функция возвращает false в случае неудачи. А у стоит знак - @. Если нет директории - сразу увидите - тогда выдаст ошибку (Она есть, кстати?). substr - если уж плюсовать в функции, то брать вычисления в скобки (). Так надежней ИМХО. Поставьте error_reporting(E_ALL) в начало скрипта. Пока ничего странного не замечаю в скрипте, проверять не очень хочется сейчас.