imho.ws |
|
16.06.2002, 16:04 | # 1 |
Guest
Сообщения: n/a
|
Upload файлов на сервер
Как сделать нормальный скрипт upload'a файлов на сервер. Я сделал один, но он нормально уплоадит и записывает только текстовые файлы. Такое ощущение, что скрипт не может работать со специальными символами. Если есть понятный пример - киньте пожалуйста.
|
17.06.2002, 00:47 | # 3 |
Registered User
Регистрация: 27.03.2002
Адрес: дома
Сообщения: 1 660
|
на перле я знаю только через модуль CGI...
ты просто binary забыл $upload_dir = '/'; $filename = param('file'); $info_outfile = lc($filename); $info_outfile =~ s {.*[\:\\\/]} []gos; $info_outfile =~ s/[^A-Za-z0-9\._ \-=@\x80-\xFE]/_/go; $info_outfile =~ s/ /_/g; if(-e "$upload_dir/$info_outfile" || param('filename') ne $info_outfile){ print "exists"; exit; }; (open INFO,">$upload_dir/$info_outfile"); binmode INFO; while ($bytes = read($filename,$data,1024)) { $length_info += $bytes; print INFO $data; } close(INFO); |
13.04.2003, 01:28 | # 6 |
Guest
Сообщения: n/a
|
Как делать UPLOAD файлов на сервер и о возможных глюках.
-------------------------------------------------------------------------------- Что такое FILE UPLOAD? Это возможность передать файлы с компьютера посетилеля в вашу ПХП программы. Это значит, вы получаете файл(ы) от посетителя и что-либо с ними делаете: ничего (человек в пустую будет upload'ить файл) вывести содержимое на экран (если файл был текстовым) записать файл один к одному в каталог на веб-сервере запихнуть фотку (файл=фото) в базу данных (про это написано в статье Бинарные файлы/картинки, показ/просмотр, общение с базой данных) -------------------------------------------------------------------------------- == 1 == (отправка файла) создайте файл upload.html такого содержимого: <html><meta http-equiv="pragma" content="no-cache"><bodY> <FORM ENCTYPE="multipart/form-data" ACTION="http://www.php.spb.ru/php/upload2.phtml" METHOD=POST> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000"><!-- макс. размер --> Имя файла: <INPUT NAME="userfile" TYPE="file"> <INPUT TYPE="submit" VALUE="Отправить"> (нажмите кнопку <b>ОБЗОР</b>, затем <b>ОТПРАВИТЬ</b>) </FORM> </body></html> Получится пустая html-страница, содержащая форму: поле для ввода имени файла (ничего вводить не надо!), кнопку ОБЗОР, которая открывает окошко для выбора файла, кнопка ОТПРАВИТЬ - отправка формы на сервер. Действия посетителя: юзер нажимает обзор, выбирает файл(ы) юзер нажимает отправить "Программер" (вы) можете подредактировать поле ACTION="upload2.phtml" (имя php-программы, принимающей файл) поле name="MAX_FILE_SIZE" value="1000" - размер максимально допустимого размера файла для аплода. -------------------------------------------------------------------------------- == 2 == (прием и использование) Ваша программа на php (в файле upload2.phtml), чтобы получить отправленный файл НЕ ДОЛЖНА НИЧЕГО ДЕЛАТЬ! Все само! Радуйтесь, товарищи :-) Перед началом выполнений вашей программы сервер принимает файл, а ПХП-процессор сообщает имя временно файла (переменная $userfile), в котором храниться только что полученный файл. Поэтому вам нужно лишь открыть файл на чтение и считать содержимое. Даже стирать этот временный файл не надо. Как вывести upload'еный файл на экран? Вот программа (ее надо записать в файл upload2.phtml ) <? echo " Вы загрузили файл размером: <font color=red><b>$userfile_size</b></font> байт<br><br> На вашем компьютере файл назывался: <font color=red><b>$userfile_name</b></font><br><br> На нашем сервере ваш файл был записан для временного храниения по адресу и под именем <font color=red><b>$userfile</b></font><br><br> Ниже его содержимое:<br> <font color=blue><pre>"; // для тех, кто не знает, команда echo implode("",file("имя_файла")); // выводит содержимое "имя_файла" на экран echo implode("",file($userfile)); ?> -------------------------------------------------------------------------------- == 3 == (о глюках) Попробуйте аплодить таким способом на сервер бинарные файлы. Скорее всего файлы окажутся "битыми": фотки не будут показываться, программы не запустяться, архивы не распакуются. Текстовые файлы (почти точно) не повредяться. Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки. <Location /> CharsetRecodeMultipartForms Off </Location> Строку CharsetRecodeMultipartForms Off можно добавлять в разные места (один раз). Если вы совсем начинающий пользователь и не решите сами, куда писать эту строку, будьте аккуратнее при решении задачи методом тыка. Можно почитать: на счет разных способов вставки данной команды (CharsetRecodeMultipartForms Off) (c)www.php.spb.ru |