Сценарий обработки
Вот, собственно, и все. Пользователь, зайдя на первую страницу (рис. 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">
В результате в программу-обработчик будут переданы:
- Массивы $uploadfile[], $uploadfile_name[], $uploadfile_size[], $uploadfile_type[], содержащие соответственно временные имена загруженных файлов, исходные имена загруженных файлов, размеры загруженных файлов и типы загруженных файлов. Порядок элементов в массивах в точности соответствует порядку полей в исходной форме – так, если имя файла file.zip было введено в первое поле типа file, то относящиеся к этому файлу переменные будут располагаться в элементах перечисленных массивов с индексом 0 (не забывайте – нумерация элементов массивов начинается с нуля!).
Данные массивы будут переданы в обработчик во всех версиях РНР, начиная с 3.0.1, если в файле php.ini (Настройка этого файла – привилегия администратора web-cepвepa, так что если вы таковым не являетесь, то включить вы ее не сумеете) включена опция register_globals.
- Массивы $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.
- Массивы $_FILES['uploadfile']['name'][], $_FILES['uploadfile'] ['tmpjiame'JO, $_FILES['uploadfile']['size'][] и $_FlLES['uploadfile'] I'type'Jl]. Их содержимое аналогично предыдущим. Данные массивы будут переданы в обработчик в версиях РНР, начиная с 4.1.
В данных примерах uploadfde – это всего лишь имя массива, вы, естественно, можете назвать его по-другому.