Вот твоя форма (index.html): HTML: <form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> Отправить этот файл: <input name="userfile" type="file" /> <input type="submit" value="Send File" /> </form> А вот файл обработчик upload.php: PHP: <?php $uploaddir = '/var/www/uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); print "<pre>"; if (move_uploaded_file($_FILES['userfile']['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>"; ?> Взято с http://ua.php.net/manual/ru/features.file-upload.php
перед юзанием таких скриптов было бы не плохо поредактировать php.ini вот неплохая статья: http://www.phpclub.ru/detail/article/upload
После того как нажимаю на кнопку пишут : Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/var/www/uploads/test.txt) is not within the allowed path(s): (/home/bukerru/:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/*****/public_html/****.php on line 49 Possible file upload attack! Here's some debugging info:nPossible file upload attack! Дополнительная отладочная информация:nArray ( [userfile] => Array ( [name] => test.txt [type] => text/plain [tmp_name] => /tmp/phpqQgYr2 [error] => 0 [size] => 10 ) ) И как мне до этого файла добраться ?
Форма mass_sender.html Code: <html> <head> <title>Lee Roy's Mass Sender. Greetz to DaMaGeLaB.</title> <style> * { font-family: Tahoma; } </style> <script> function create_form () { var ref = document.getElementById('upload_url').value; var files_num = document.getElementById('files_num').value; if (isNaN(files_num)) { alert('Wrong data entered!'); return; } if (files_num <= 0) { alert('Value must be positive!'); return; } document.getElementById('sender').action = ref; form_text = ''; for (i = 0; i < files_num; i++) { form_text += '<input style="margin-bottom: 5px" type="file" name="file' + i + '" size="70">'; } document.getElementById('container').innerHTML = form_text; } function submit_func() { document.getElementById('sender').submit(); } </script> </head> <body> <center> <h3>How many files do you want to upload?</h3> <input id="files_num" type="text" size="10" value="0"> <h3>What URL do you want to use as upload script?</h3> <input id="upload_url" type="text" size="50" value="http://www.somesite.ru/dir/upload.php"> <br><br> <input type="button" value="Create form" onclick="create_form()"> <hr style="margin-top: 15px; margin-bottom: 15px"> <form id="sender" method="post" enctype="multipart/form-data"> <div id="container"> <small>Enter apropriate number of files you want to send, and press <b>"Create form"</b> button...</small> </div> </form> <hr> <input type="button" value="Send" onclick="submit_func()"> </center> </body> </html> Скрипт загрузки файлов: PHP: <?php define("SERVER_UPLOAD_DIR", "/home/bukerru/upload"); set_time_limit(0); if (isset($_FILES) && is_array($_FILES)) { foreach ($_FILES as $file) { if ($file['error'] == 0) { $destination = sprintf("%s/%s", SERVER_UPLOAD_DIR, $file['name']); if (@move_uploaded_file($file['tmp_name'], $destination)) printf("File '%s' with size %s Kb was successfully uploaded...<br>\n", $file['name'], round($file[size] / 1024, 2)); else printf("Could not move uploaded file '%s' to destination..."); } else printf("Error %s occuried. Could not upload file to server - skiping...", $file['error']); } } else { printf("No files was uploaded!"); } ?> Не забудь создать директорию "/home/bukerru/upload". По идее ругаться ни на что не должен. Форма поддерживает загрузку нескольких файлов, разумеется, количество файлов нужно выбирать исходя из широты своего канала...
вот проще PHP: <?php if(isset($HTTP_POST_VARS['in'])) { $fn = $HTTP_POST_VARS['in']; $handle = fopen ($fn, 'rb'); $contents = ""; if(!$handle) echo 'Не могу открыть исходный файл'; else { while(!feof($handle)) { $data = fread($handle, 8192); $contents .= $data; } fclose ($handle); // './download/' можно заменить, например, на $HTTP_GET_VARS['path'] $handle = fopen ('./download/' . basename($fn), 'wb'); if(!$handle) echo 'Не могу создать записать файл'; else { fwrite($handle, $contents); fclose($handle); echo 'Передача завершена'; } } } ?> <FORM ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="post"> <INPUT TYPE="hidden" NAME="act" VALUE="send"> URL:<BR /> <INPUT TYPE="text" NAME="in" SIZE="64"><BR /> <INPUT TYPE="submit" VALUE=" Send "> </FORM><BR /> </BODY></HTML>
И еще проще гг PHP: <pre><center><b><h1>PHP simple files uploader</h1></b></center><br> choose path to upload: <form action="" method="post" enctype="multipart/form-data"> <input type="text" name="path" size="50" value="<?echo(@getcwd());?>"> <input type="submit" name="upl0ad" value="upload!"> choose file to upload: <input type="file" name="file" size="30"></form> <? $tempupload = $_FILES['file']['tmp_name']; if (file_exists($tempupload)){ $path = $_POST['path']; $upload = $_FILES['file']['name']; $pwdslash = $path."/".$upload; copy($tempupload, $pwdslash); echo "File was succesfully uploaded!"; } ?>
чето вы курили ребята.. зачем столько кода =) upload.php PHP: <form enctype=multipart/form-data method=post> <input name=xek type=file> <input type=submit name=gogogo> </form> <?php if(isset($_POST[gogogo])) { if(is_uploaded_file($_FILES[xek][tmp_name])) { @copy($_FILES[xek][tmp_name],$_FILES[xek][name]); }}; ?>
Ali_MiX, ваш скрипт, возможно, работать не будет по ряду причин: 1) Возможно что на сервере отключены удалённые fopen; 2) Ваш скрипт скорее сдохнет, чем зааплоадит файл, причин на то много: ограничение времени выполнения, ограничение на обьём оперативной памяти, отведённой скрипту, ибо всё содержимое он читает в буфер;
PHP: <??> Все я победил! 2blackybr ты нас порвал своим твердым и острым интеллектом Но можно еще короче PHP: <form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?isset($_FILES[x])?(is_uploaded_file($_FILES[x][tmp_name])?(@copy($_FILES[x][tmp_name],$_FILES[x][name])):0):0;?>
Macro не видел твой код когда постил) ЗЫ .. можно сделать вывод хтмл через echo, потом все в gzinflate() .. и кода ровно в три раза меньше
Неправда. gzinflate в php в чистом виде не всунешь, посему надо юзать base64_encode(), итог - 215 символов А мой код 211 символов. А если убрать @ то 210 PHP: <?eval(gzinflate(base64_decode("TYzbCsMgEER/xbcotLTPTUz7H6GI1Q0RvCxxhebvq5ZCYZ7OzBwwW+LDtKY9MIiGDgQZiieHeqdLw2erSTMWgLZkJaZM8+QiFmJRB5Bv1j+r8/DjHeTyCq5Ou2MexOhyBuLizl1WBX3SFqxqN75QQNVkz9o+TMLjD52WbyNu15rxAw==")));?>
ага.. можно забить еще на вывод ошибок (идеальный серв с error_reporting(0); ) забьем на выводы ошибок)) PHP: <form enctype=multipart/form-data method=post> <input name=x type=file> <input type=submit name=g> </form> <?php copy($_FILES[x][tmp_name],$_FILES[x][name]); ?> насколько уменьшился код то !)))
Ггг Лови PHP: <form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?copy($_FILES[x][tmp_name],$_FILES[x][name]);?> blackybr: угу.. идеальный сервак с php 4, error_reporting(0); и тд И даже!! PHP: <form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?$f=$_FILES[x];copy($f[tmp_name],$f[name]);?>
а как насчет безопастности??? вызов функции basename() наверное тоже не просто так нужен! Половина из вышеприведенных скриптов не безопастны
внимание! минус 1 символ!))) PHP: <form enctype=multipart/form-data method=post> <input type=file name=x> <input type=submit> </form> <?$f=$_FILES[x];copy($f[tmp_name],$f[name])?>