Поиск

Загрузка файла на удаленный компьютер

Надеюсь, мы наглядно показали, как легко обрабатывать HTMLформы, пользу ясь языком РНР. Независимо от типа передаваемых данных в РНР есть все необходимые средства для их проверки, правки и долговременного хранения. Выполнить загрузку файла через HTMLформу также легко.

Чтобы дать пользователю возможность загрузить файл, необходимо провес ти два изменения в стандартной HTMLформе. Вопервых, начальная строка формыдолжна содержать код ENCTYPE= "multipart/formdata", который ука зывает серверу, что ожидается получение файла или других данных. Вовторых, элемент <INPUT TYPE=FILE NAME=NAME> используется для создания в форме поля, в котором вводится точный адрес файла.

Элемент INPUT TYPE=FILE позволяет пользователю указать тот файл на сво ем компьютере, который при отправке будет загружен на сервер. Как только это произошло, можно обрабатывать файл с помощью РНР.

При загрузке файла сервер помещает его во временный каталог. Ваша зада ча после прибытия файла сохранить его в постоянном каталоге. Функция сору ( ) используется для копирования файла в новое место:

сору ("SourceName", "DestinationName");

Затем с Помощью функции unlink ( ) необходимо удалить временный файл. Напишем очень простой сценарий, который' загружает файл и сохраняет его в каталоге users. Так же, как и сценарий urls.php, он создает HTMLформу и обрабатывает ее.

Использование РНР для загрузки файлов на сервер

  1. Создайте новый PHPдокумент в текстовом редакторе.
  2. Начните со стандартного HTMLзаголовка.
  3. <HTMLxHEADxTITLE>Handling File Uploads</TITLEx/HEADxBODY>
  4. Откройте PHPраздел и создайте условную конструкцию, которая будет проверять, нужно ли загружать файл.
  5. <?php
    if ($File) {

    Информация о загружаемом файле будет храниться в переменной $File. Если эта переменная существует (то есть имеет значение), ее надо обрабатыват

  6. Распечатайте имя файла и его размер.
  7. print ("File name: $File_name<P>n");
    print ("File size: $File_size<P>n");

    Когда файл загружен, создается несколько новых связанных с ним пере менных. Взяв имя основной переменной (в данном случае $File) и добавив суффикс _name или _size, вы получаете от сервера соответствующую инфор мацию.

  8. Попробуйте скопировать файл в каталог users и распечатать сообщение о результатах этого действия.
  9. if (copy ($File, "users/$File_name")) {
    print ("Your file was successfully uploaded!<P>n");
    } else {
    print (''Your file could not be copied.<P>n");

    Команда copy принимает два аргумента имя файла, откуда и куда необхо димо копировать. У нас при копировании оригинальный файл хранится в пе ременной $File, а конечный пункт либо абсолютен (например, c:/php/ data. txt), либо относителен к текущему каталогу (например, "php/data. txt"). Здесь мы использовали относительную ссылку, запросив поместить файл в ка талог users, который находится в одном каталоге с этим скриптом.

  10. Удалите файл и закройте условную конструкцию.
  11. unlink ($File);

    Вполне вероятно, что позже файл будет автоматически удален сервером. Но лучше во всем быть последовательным и сразу после копирования стереть файл. Для удаления файла используется функция unlink ( ) .

  12. Распечатайте HTMLформу для загрузки файла на сервер.
  13. print ("Upload a file to the server:n");
    print ("<FORM ACTION="FileUpload.php" METHOD=POST
    ENCTYPE="multipart/formdata">n");
    print ("File <INPUT TYPE=FILENAME="File" SIZE=20xBR>n");
    print ("<INPUT TYPE=SUBMIT NAME="SUBMIT"
    VALUE="Submit!nx/FORM>n") ;

    He забудьте добавить код ENCTYPE к открывающему тэгу формы. Строка INPUT TYPE=FILE не требует объяснений.

  14. Закройте РНР и HTML.
  15. ?></BODYx/HTML>
  16. Сохраните файл как FileUpload.php (листинг 10.7), загрузите его на сервер (вместе с каталогом users) и протестируйте в браузере (рис. 10.13 и 10.4). Листинг 10.7 т Этот простой сценарий показывает, как легко в РНР обраба тываются HTMLформы. Загрузка файла на сервер состоит из трех этапов: из менение соответствующим образом HTMLформы, перемещение файла в нуж ное место с помощью функции сору ( ) и удаление файла посредством функции unlink(). ч .
  17. 1 <HTML>
    2 <HEAD>
    3 <TITLE>Handling File Uploads</TITLE>
    4 </HEAD>
    5<BODY>
    6 <?php
    7/* Следующее условие устанавливает, обрабатывать ли форму
    в зависимости от того, присутствует ли $File. */
    8 if ($Fil*> {
    9print ("File namei $Pil*_nam*<P>n");
    10 print ("Pile sicei $Pil«_«lx*<P>n");
    11if (copy ($Fil«, "uMr§/$Pil«_nam*")) {
    12 print ("Your file was successfully uploaded!<P>n");
    13} else {
    14 print ("Your file could not be copied.<P>n")j
    15}
    16unlink ($Fil«);
    17 }
    18
    19 print ("Upload a file to the server:n");
    20 print ("<PORM ACTION."Pil*Upload.php" METHODPOST
    SNCTYPE«"Bulfcip»rt/form<Ut*">n") i
    21 print ("Pile <INPOT TYPBFILB NAMB"Pil«" SIZEm20xBR>n");
    22 print ("<INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
    </FORM>n");
    23 ?>
    24 </BODY>
    25 </HTML>

    Мы решили использовать созданный ранее каталог users, поскольку известно, что все пользователи могут записывать в него некую информацию. Если вы попытае тесь скопировать файл в каталог, запись данных в который неразрешена, резуль тат этого действия будет выглядеть так же, как на рис. 10.15.

    Максимальный размер загружаемого файла зависит от нескольких факторов. Во первых, от ограничений, предусмотренных на сервере. Вовторых, ограничения могут накладываться и в самом языке РНР (в конфигурационном файле php.ini). Втретьих, вы можете задать максимальный размер файла, написав следующее:

    •cINPUT TYPE=HIDDEN NAME="MAX_FILE_SIZE" VALUE="2048">

    В форме перед вводом слова FILE значение выражено в байтах.




    Тип файла, который присваивается переменной $File_type при загрузке пере- менной $File, - это то же самое, что и его тип MIME (многоцелевые расширения электронной почты в сети Internet). Последний используется в приложениях элек- тронной почты и в браузерах для указания того, какой программой обрабатывать файл. К типам MIME относятся image/jpeg или text/html.