Теперь решим более сложную и часто возникающую на практике задачу загрузки файла на сервер. Первое, что нужно сделать, чтобы загрузить файл на сервер, это создать html-форму. Для того чтобы с помощью этой формы можно было загружать файлы, она должна содержать атрибут enctype в теге form со значением multipart/form-data, а также элемент input типа file.
Пример 9.11.
<form enctype="multipart/form-data" action="parse.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> Загрузить файл: <input type="file" name="myfile" /><br> <input type="submit" value="Отправить файл" /> </form>
Пример 9.11. Форма для загрузки файла на сервер (html, txt)
Заметим, что мы добавили в форме скрытое поле, которое содержит в себе максимальный допустимый размер загружаемого файла в байтах. При попытке загрузить файл, размер которого больше указанного в этом поле значения, будет зафиксирована ошибка. В браузере созданная нами форма будет выглядеть как строка для ввода текста с дополнительной кнопкой для выбора файла с локального диска (рис 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 всегда имеет следующие элементы: