именно ее как разделитель.
Далее алгоритм разбора должен быть следующим: в цикле мы пропускаем символы
иден-
тификатора и перевода строки, извлекаем подстроку имя="что-то" (не обращая
внима-
ния на Content-Disposition), дожидаемся двух символов перевода строки и затем
считаем значением соответствующего поля все те данные, которые размещены до
строки \nИдентификатор (или же до конца, если такой строки больше нет). Как ви-
дите, все довольно просто.
Часть I. Основы Web-программирования 66
Стандарт HTTP предписывает, чтобы перевод строки содержал два символа —
\r\n, а не один \n. Как вы уже, наверное, чувствуете, существуют браузеры,
которые об этом и не догадываются и посылают только один \n. Так что, будь-
те готовы к тому, чтобы правильно обрабатывать и эту ситуацию.
Тэг загрузки файла (file)
Теперь вернемся к тому, с чего начали — к загрузке файлов. Сначала выясним,
какой
тэг надо вставить в форму, чтобы в ней появился соответствующий элемент
управле-
ния — поле ввода текста с кнопкой Browse справа. Таким тэгом является разновид-
ность :
Пусть пользователь выбрал какой-то файл (скажем, с именем каталог\
имя_файла) и нажал кнопку отправки. В этом случае для нашего элемента формы
создается один блок примерно такого вида:
----------------127462537625367\n
Content-Disposition: form-data; name="имя_элемента";
A filename="каталог\имя_файла"\n \n
........
Бинарные данные этого файла любой длины.
Здесь могут быть совершенно любые
байты без всякого ограничения.
........
\n
Мы видим, что сценарию вместе с содержимым файла передается и его имя в системе
пользователя (параметр filename).
На этом, пожалуй, и завершим обозрение возможностей загрузки файлов.
Надеюсь, я посеял в вас неприязненное отношение к подобным методам: действи-
тельно, программировать это — не самое приятное занятие на свете (укажу только
на
то, что придется использовать приемы программной буферизации, чтобы правильно
найти разделитель). Вот еще один довод в пользу PHP, в котором не нужно выпол-
нять в принципе никакой работы, чтобы создать полноценный сценарий с возможно-
стью загрузки файла.
Глава 3. CGI изнутри 67
Что такое Cookies и с чем их едят
Сначала хотелось бы сказать пару слов насчет самого термина Cookies (это
множест-
венное число, произносится как "кукис" или, более "русифицировано", "куки"). В
бук-
вальном переводе слово звучит как "печенье", и почему компания Netscape так
назва-
ла свое изобретение, не совсем ясно. А поскольку писать "печенье" несколько
неудобно, чтобы не вызывать несвоевременных гастрономических ассоциаций, везде,
где можно, я буду применять именно слово Cookies, с большой буквы, во множест-
венном числе и мужского рода. Кстати, в единственном числе это понятие
записыва-
ется Cookie и произносится на русский манер — "кука".
Начну с примера. Скажем, мы хотим завести гостевую книгу: пользователь вводит
свое имя, E-mail, адрес домашней странички (и другую информацию о себе),
наконец,
текст сообщения, и после нажатия на кнопку его мысль отправляется в путешествие
по проводам и серверам, чтобы в конце концов попасть в некую базу данных на на-
шем сервере и остаться там на веки вечные. М-да….
Теперь предположим, что эта наша гостевая книга — довольно часто посещаемое
место, у нее есть постоянные пользователи, которые несколько раз на дню
оставляют
там свои сообщения. Что же — им придется каждый раз вводить свое имя, адрес
электронной почты и другую информацию в пустые поля? Как бы сделать так, чтобы
это все запоминалось где-то, чтобы даже при следующем запуске браузера нужные
поля формы инициализировались автоматически, разумеется — у каждого пользова-
теля индивидуально, тем, чем он заполнил их ранее?
Чтобы этого добиться, в принципе существуют два метода. Оба они