PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic WEB разработка *NIX CouchDB Hack Python
Главная Статьи PHP Как делать UPLOAD файлов на сервер и о возможных глюках.
Главная
 Главная  Контакты
 
Программинг
Статьи Книги ЧаВО
 
xBOOKi
Fresh Books Операционки Сети
 
Поиск
-------
 
Counters
Яндекс цитирования
Rambler's Top100
-------
 
CryptDisk.4h
Программа которая позволяет создать виртуальный шифрованный логический диск.

cryptdisk.4hack.com

-------
 
 

Как делать UPLOAD файлов на сервер и о возможных глюках.

Dima Borodin
http://php.spb.ru/

[RUS MANUAL] - ссылка на параграф русской документации, посвещенной данной операции (не плачьте, читать не заставляем)



Что такое FILE UPLOAD?


Это возможность передать файлы с компьютера посетилеля в вашу ПХП программы. Это значит, вы получаете файл(ы) от посетителя и что-либо с ними делаете:

== 1 ==
(отправка файла)

создайте файл upload.html такого содержимого:
<html><bodY>
<FORM ENCTYPE="multipart/form-data" ACTION="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)

Можно прочитать данную статью, но написанную другими соловами, другим человеком и на другом сайте - http://www.leosha.f2s.com/php/upload.htm

Вопросы? Пишите: dima@php.spb.ru
<?
upload файла

<html>
<head>
<title>Загрузка</title>
</head>
<body topmargin=0 leftmargin=0>
<style type="text/css">
<!--
@import url(/style.css);
-->
</style>
<?php 
$store_dir='/pub/home/programm/htdocs/incoming/'; 
if (!$userfile) { 
?> 
<input type="file" name="userfile">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<input type="submit" value="Отправить"> 
</form>
<?php 
} 
else { 
if (is_uploaded_file($userfile)) { 
move_uploaded_file($userfile, $store_dir.$userfile_name); 
print "Файл отправлен <br>\n"; 
} 
else { 
print "Ошибка, файл не отправлен <br> \n"; 
} 
} 
?>
</body>
</html>
?>


Свежее
Резервное копирование rsync-ом
DNS Amplification (DNS усиление)
Алгоритм Шинглов — поиск нечетких дубликатов текста
Metasploit Framework. Обзор
Использование CouchDB
-------



 
Copyright © 2003-2009   Frikazoid.
Rambler's Top100