On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

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

Дмитрий Бородин

Что такое FILE UPLOAD?


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


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

создайте файл upload.html такого содержимого:
</pre>
</b></font>
<FORM ENCTYPE="multipart/form-data" ACTION="upload2.phtml" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
<pre>Имя файла: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Отправить">
(нажмите кнопку <b>ОБЗОР</b>, затем <b>ОТПРАВИТЬ</b>)
</FORM>
</pre>
Получится пустая html-страница, содержащая форму: поле 
для ввода имени файла (ничего вводить не надо!), кнопку <FONT 
color=red><B>ОБЗОР</B></FONT>, которая открывает окошко для выбора файла, кнопка 
<FONT color=red><B>ОТПРАВИТЬ</B></FONT> - отправка формы на сервер. 
<BR><BR>Действия посетителя: 
<UL>
  <LI>юзер нажимает <FONT color=red><B>обзор</B></FONT>, выбирает файл(ы)<BR>
  <LI>юзер нажимает <FONT 
color=red><B>отправить</B></FONT><BR></LI></UL>"Программер" (вы) можете 
подредактировать 
<UL>
  <LI>поле <FONT color=red><B>ACTION="upload2.phtml"</B></FONT> (имя 
  php-программы, принимающей файл) 
  <LI>поле <FONT color=red><B>name="MAX_FILE_SIZE" value="1000"</B></FONT> - 
  размер максимально допустимого размера файла для аплода. </LI></UL><BR><BR>
<HR>
<BR>
<CENTER><B>
<H2>== 2 ==<BR>(прием и использование)</H2></B></CENTER>Ваша программа на php (в 
файле <B>upload2.phtml</B>), чтобы получить отправленный файл <B>НЕ ДОЛЖНА 
НИЧЕГО ДЕЛАТЬ</B>! Все само! Радуйтесь, товарищи :-) <BR><BR>Перед началом 
выполнений вашей программы сервер принимает файл, а ПХП-процессор сообщает имя 
временно файла (переменная <FONT color=red><B>$userfile</B></FONT>), в котором 
храниться только что полученный файл. Поэтому вам нужно лишь открыть файл на 
чтение и считать содержимое. Даже стирать этот временный файл не надо. 
<BR><BR>Как вывести upload'еный файл на экран? Вот программа (ее надо записать в 
файл <FONT color=red><B>upload2.phtml</B></FONT> ) <FONT color=blue><B><PRE><XMP>&lt;?
  echo &quot;

      Вы загрузили файл размером:
      <font color=red><b>$userfile_size</b></font> байт



      На вашем компьютере файл назывался:
      <font color=red><b>$userfile_name</b></font>



      На нашем сервере ваш файл был записан для временного храниения
      по адресу и под именем
      <font color=red><b>$userfile</b></font>



      Ниже его содержимое:
 <font color=blue></pre>
<pre>&quot;;

  // для тех, кто не знает, команда echo implode(&quot;&quot;,file(&quot;имя_файла&quot;));
  // выводит содержимое &quot;имя_файла&quot; на экран

  echo implode(&quot;&quot;,file($userfile));

?&gt;


== 3 ==
(о глюках)

Попробуйте аплодить таким способом на сервер бинарные файлы. Скорее всего файлы окажутся "битыми": фотки не будут показываться, программы не запустяться, архивы не распакуются. Текстовые файлы (почти точно) не повредяться. Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки.

<Location />
    CharsetRecodeMultipartForms Off
</Location>
Строку CharsetRecodeMultipartForms Off можно добавлять в разные места (один раз). Если вы совсем начинающий пользователь и не решите сами, куда писать эту строку, будьте аккуратнее при решении задачи методом тыка.


Литература по PHP