ОБЩИЕ СВЕДЕНИЯ

Чтобы пользователь мог загрузить файл на сервер с web-страницы, на этой странице должна присутствовать форма с параметром заголов­ка enctype, равном "multipart/form-data", а также со специ­альным полем типа file (выглядит как поле ввода имени файла с кнопкой "Обзор", нажав на которую, можно отобразить окно выбора файла) и кнопкой submit (см., например, рис.7.3). Как только эта кнопка будет нажата, браузер начнет передавать файл, указанный в поле типа file, на сервер. В заголовке формы также следует указать параметр action, значением которого должно быть имя страницы с обрабатывающим загруженный файл сценарием.

Загрузку файла на сервер умеют осуществлять практически все браузеры (только самые старые модели Microsoft Internet Exploreи Netscape Navigator этого не могут), а воспринять ее могут все web-серверы (кроме CERN и некоторых самых простых), в том числе и самый распространенный - Apache.

После того как файл полностью загружен на сервер, он помещается в его временную папку и находится там до тех пор, пока web-сервер не закончит обрабатывать и отдавать браузеру пользователя ту страницу,

имя которой было указано в параметре action формы загрузки фай­ла. После полной выдачи страницы пользователю файл удаляется. От­сюда следует, что на этой странице должны обязательно присутство­вать команды, перемещающие этот файл в какую-либо папку.

Странице, указанной в параметре action заголовка формы, пере­даются несколько переменных1, содержащих информацию о загружен­ном файле. Именно на их основе сценарий на ней сможет работать с загруженным файлом. Кроме того, эти же самые переменные поме­щаются в массив SHTTPJPOSTJFILES2, а в РНР версий 4.1 и выше -и в массив $_FILES (в отличие от переменных и массива $HTTP_POST_FILES этот массив по умолчанию доступен и во всех функциях, размещенных на странице с программой-обработчиком за­груженных файлов).

Вот эти переменные:

1. Переменная, имеющая то же имя, что и поле с типом file

в исходной    форме.    Если    оно    выглядело    как    <input

name= "uploadf ile"    type=" f ile">,   то переменная будет

иметь       имя       $uploadfile       (и соответственно еще

$HTTP_POST_FILES['uploadfile'] ['tmp_name'],

$_FILES [ * uploadf ile ' ] [ ' tmp_name ' ]). В эту переменную запи­сывается то имя (временное, создающееся автоматически), которое за­груженный файл имеет в папке временных файлов. Именно с ним будут работать команды копирования файла.

Если в исходной форме присутствовало несколько полей типа file с разными именами, то для каждого из них создается своя переменная со значением, относящимся к соответствующему файлу.

2. Переменная, имеющая имя "Переменная 1 _пате" - т. е. к имени первой переменной просто приписывается горизонтальная черточка

1 Если в конфигурационном файле РНР - php.ini - параметр regis-ler_globals установлен в on.

Если в конфигурационном файле РНР - php.ini - параметр track_varsус-

тановлен в on.и слово name, например, для вышеуказанного примера ее имя будет выглядеть как $uploadf ile„name (ну и, разумеется, то же самое значение     получат     элементы     вышеупомянутых массивов

$HTTP_POST__FILES[ 'uploadfile' ] [ 'name' ] ,

$_FILES['uploadfile* ] ['name'])• Ее значением является ис­ходное имя файла в системе отправителя.

3. Переменная, имеющая имя "Переменная I size". Ее значение -размер загруженного файла в байтах.

4. Переменная, имеющая имя "Переменная I jype". Ее значение -тип загруженного файла согласно спецификации MIME (например, "image/gif").

Все эти переменные можно использовать в PHP-сценарии, распо­ложенном на указанной в параметре action заголовка формы, при­надлежащей передающей файл странице. Для копирования файла ис­пользуется команда сору ("имя копируемого файла (и путь к нему)1', "путь к папке, в которую нужно файл ско­пировать и его новое имя там"). Путь к файлу во временной

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

Об удалении файла из временной папки после копирования его в нужный каталог можно не думать - это, как уже было сказано, про­изойдет автоматически.