Сложные имена полей
Как вы, наверное, помните, элементы формы могут иметь имена, выглядящие, как элементы массива: A[10], B[1][text] и т.д. До недавнего времени (в третьей версии PHP) это касалось только "обычных" полей, но не полей закачки файлов. К счастью, в PHP версии 4 все изменилось в лучшую сторону.
Давайте применим указанные возможности в следующем примере формы и определим, какие переменные создаст PHP при ее отправке на сервер.
<form action="script.php" method=POST enctype=multipart/form-data>
<h3>Выберите тип файлов в вашей системе:</h3>
Текстовый файл: <input type=file name="File[text]"><br>
Бинарный файл: <input type=file name="File[bin]"><br>
Картинка: <input type=file name="File[pic]"><br>
<input type=submit name=Go value="Отправить файлы">
</form>
После того как программа script.php примет данные из формы, PHP создаст для нее следующие переменные:
r ассоциативный массив $File, ключи которого — text, bin и pic, а соответствующие значения — имена временных файлов на сервере, созданных PHP при загрузке;
r массив $File_name
все с теми же ключами и значениями — именами файлов в системе пользователя;
r массив $File_type
с теми же ключами и значениями — типами соответствующих файлов;
r массив $File_size
со значениями — размерами этих файлов.
Мы видим, информация об индексах в именах полей формы попала в ключи соответствующих массивов и сохранилась в них. Вы можете убедиться в том, что переменные действительно инициализированы, воспользовавшись вызовом функции Dump($GLOBALS), код которой приведен в конце главы 11, и в полезности которой вы теперь можете убедиться на примере.
Еще раз напоминаю, что PHP версии 3 неправильно работает с подобными именами полей. Учитывайте это, если собираетесь использовать старый интерпретатор.