Язык программирования PHP | страница 88



> Загрузить файл:

> name="myfile" />

>

> value="Отправить файл" />



Заметим, что мы добавили в форме скрытое поле, которое содержит в себе максимальный допустимый размер загружаемого файла в байтах. При попытке загрузить файл, размер которого больше указанного в этом поле значения, будет зафиксирована ошибка. В браузере созданная нами форма будет выглядеть как строка для ввода текста с дополнительной кнопкой для выбора файла с локального диска (рис 9.1).



Рис. 9.1.  Пример формы для загрузки файла на сервер

Теперь нужно написать скрипт, который будет обрабатывать полученный файл.


Вся информация о загруженном на сервер файле содержится в глобальном массиве $_FILES. Этот массив появился начиная с PHP 4.1.0. Если включена директива register_globals, то значения переданных переменных доступны просто по их именам.


Если мы загрузили с компьютера-клиента файл с именем critics.htm  размером 15136 байт, то скрипт с единственной командой print_r($_FILES); выведет на экран следующее:


>Array ( [myfile] =>

> Array ( [name] => critics.htm

> [type] => text/html

> [tmp_name] => C:\WINDOWS\TEMP\php49F.tmp

> [error] => 0

> [size] => 15136

> )


)


Вообще говоря, массив $_FILES всегда имеет следующие элементы:


- $_FILES['myfile']['name'] - имя, которое имел файл на машине клиента.


- $_FILES['myfile']['type'] - mime-тип отправленного файла, если браузер предоставил эту информацию. В нашем примере это text/html.


- $_FILES['myfile']['size'] - размер загруженного файла в байтах.


- $_FILES['myfile']['tmp_name'] - временное имя файла, под которым он был сохранен на сервере.


- $_FILES['myfile']['error'] - код ошибки, появившейся при загрузке.


Здесь 'myfile' - это имя элемента формы, с помощью которого была произведена загрузка файла на сервер. То есть оно может быть другим, если элемент формы назвать иначе. Но вот другие ключи (name, type и т. д.) остаются неизменными для любой формы.


Если register_globals=On, то доступны также дополнительные переменные, такие как $myfile_name, которая эквивалентна $_FILES['myfile']['name'], и т.п.


 Ошибок при загрузке в PHP выделяют пять типов и соответственно $_FILES['myfile']['error'] может иметь пять значений:


0 - ошибки не произошло, файл загружен успешно


1 - загружаемый файл превышает размер, установленный директивой upload_max_filesize в файле настроек php.ini


2 - загружаемый файл превышает размер, установленный элементом MAX_FILE_SIZE формы html