Иллюстрированный самоучитель по PHP

Сценарий обработки

Вот, собственно, и все. Пользователь, зайдя на первую страницу (рис. 7.3), должен ввести свой пароль и найти с помощью открывающегося при нажатии на кнопку "Обзор" диалогового окна файл для загрузки. После нажатия кнопки "Загрузить" он увидит одно из трех сообщений – см. рис. 7.4, 7.5, 7.6.

Если вместо имен, содержащих информацию о загружаемом файле и передаваемых через форму переменных, использовать имена соответствующих элементов массивов $HTTP_POST_FILES и $HTTP_POST_VARS, то код обработчика будет выглядеть так:

<?php
if ($HTTP_POST_FILES['zak']['name']=="none") {echo ("Вы забыли указать файл…");}
elseif ($HTTP_POST_VARS['pass']!="parol") { echo ("Ваш пароль неверен!");}
elseif
(copy($HTTP_POST_FILES['zak']['tmp_name'], "user/".$HTTP_POST_FILES['zak']['name']))
{echo ("Файл ".$HTTP_POST_FILES['zak1] ['name']." размером ".
$HTTP_POST_FILES['zak']['size']." байт успешно загружен на сайт.");}
else
echo("Hfe удалось скопировать ".
$HTTP_POST_FILES['zak']['name']);}?>

Обратите внимание, что при формировании конечного имени файла (в команде сору), а также в строках, выводимых командой echo, писать просто имена элементов массива нельзя – будет выдаваться ошибка! Необходимо использовать оператор конкатенации – точку.

Неправильно:

echo ("Имя файла: $HTTP_POST_FILES['zak']['name']")

Правильно:

echo ("Имя файла:". $HTTP_POST_FILES t'zak'] ['name'])

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

Однако для загрузки нескольких файлов можно использовать и конструкцию с массивом. Для этого достаточно в исходной форме дать полям типа file название с квадратными скобками:

<input name="uploadfile[]" type="file">
<input name="uploadfile[]" type="file">
<input name="uploadfile[]" type="file">

В результате в программу-обработчик будут переданы:

  1. Массивы $uploadfile[], $uploadfile_name[], $uploadfile_size[], $uploadfile_type[], содержащие соответственно временные имена загруженных файлов, исходные имена загруженных файлов, размеры загруженных файлов и типы загруженных файлов. Порядок элементов в массивах в точности соответствует порядку полей в исходной форме – так, если имя файла file.zip было введено в первое поле типа file, то относящиеся к этому файлу переменные будут располагаться в элементах перечисленных массивов с индексом 0 (не забывайте – нумерация элементов массивов начинается с нуля!).

    Данные массивы будут переданы в обработчик во всех версиях РНР, начиная с 3.0.1, если в файле php.ini (Настройка этого файла – привилегия администратора web-cepвepa, так что если вы таковым не являетесь, то включить вы ее не сумеете) включена опция register_globals.

  2. Массивы $HTTP_POST_FILES['uploadfile']['tmp_name'][], $HTTP_POST_FILES[luploadfile')['name'][], $HTTP_POST_FILES ['up-loadfile'H'size'][] и $HTTP_POST_FILES['uploadfile']['type'][], содержащие соответственно временные имена загруженных файлов, исходные имена загруженных файлов, размеры загруженных файлов и типы загруженных файлов. Порядок элементов в массивах опять-таки в точности соответствует порядку полей в исходной форме.

    Данные массивы будут переданы в обработчик во всех версиях РНР, начиная с 3.0.1, если в файле php.ini включена опция track_vars.

  3. Массивы $_FILES['uploadfile']['name'][], $_FILES['uploadfile'] ['tmpjiame'JO, $_FILES['uploadfile']['size'][] и $_FlLES['uploadfile'] I'type'Jl]. Их содержимое аналогично предыдущим. Данные массивы будут переданы в обработчик в версиях РНР, начиная с 4.1.

В данных примерах uploadfde – это всего лишь имя массива, вы, естественно, можете назвать его по-другому.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.