РНР 5 в подлиннике

Страница 29 из 554


60

Часть I. Основы Web-программирования

□ Файл document.ext может быть вовсе не текстовым документом, а программой, которая в ответ на наш запрос молниеносно запустится, не менее стремительно выполнится и возвратит пользователю результаты своей работы, хотя бы в том же HTML-формате (или, разумеется, в любом другом, — например, это может быть изображение). Пользователь и не догадается, что на самом деле произошло. Для него все равно, загружает ли он документ или невольно запускает программу. Более того, он никак не сможет узнать, что же на самом деле случилось.

Последний пункт особенно впечатляющ. Если вы прониклись его идеей, значит, поняли в общих чертах, что такое CGI. Традиционно программы, работающие в соответствии с соглашениями CGI, называют сценариями, или скриптами — скорее всего из-за того, что в большинстве случаев их пишут на языках-интерпретаторах, подобных Basic (например, на Perl или РНР).

Задумаемся на мгновенье. Мы получили довольно мощный механизм, который позволяет нам, в частности, формировать документы "на лету". К примеру, пусть нам нужно, чтобы в каком-то документе проставлялись текущая дата и время. Разумеется, мы не можем заранее прописать их в документе — ведь в зависимости от того, когда он будет загружен пользователем, эта дата должна меняться. Зато мы можем написать сценарий, который вычислит дату, вставит ее в документ и затем передаст его пользователю, который даже ничего и не заметит!

Однако в построенной нами модели не хватает одного звена. Действительно, предположим, нам нужно, чтобы время в нашей странице проставлялось на основе часового пояса пользователя. Но как сценарий узнает, какой часовой пояс у региона, в котором живет этот человек (или какую-нибудь другую информацию, которую может предоставить пользователь)? Видимо, должен быть какой-то механизм, позволяющий пользователю не только получать, но. также и передавать информацию серверу (в данном случае, например, поправку времени в часах относительно Москвы). И это тоже обеспечивает CGI. Но вернемся прежде к URL.

Помните, мы в предыдущей главе описывали, как выглядит URL? Так вот, это был только частный случай. На самом деле URL имеет более "длинный" вид:

http://examplexom:80/path/to/document.ext?/>flrametero

Как нетрудно заметить, может существовать еще строка parameters, следующая после вопросительного знака. В некоторой степени она аналогична командной строке ОС. В ней может быть все, что угодно, она может быть любой длины (однако следует учитывать, что некоторые символы должны быть URL-закодированы, см. ниже). Вот как раз эта-то строка и передается CGI-сценарию.

На самом деле существуют некоторые ограничения на длину строки параметров. Но нам приходится сталкиваться с ними довольно редко, чтобы имело смысл об этом говорить. Если URL слишком длинен для браузера, то вы это легко обнаружите — соответствующая гиперссылка просто "перестанет нажиматься".

Секреты URL

Гпава 2. Интерфейс CGI и HTTP

61

Вернемся к нашему предыдущему примеру. Теперь пользователь может указать свой часовой пояс сценарию, например, так:

http://example.com/script.cgi?time=+5

Сценарий с именем script.cgi, после того как запустится и получит эту строку параметров, должен ее проанализировать (например, создать переменную time и присвоить ей значение +5, т. е. 5 часов вперед) и дальше работать как ему нужно. Обращаю ваше внимание на то, что принято параметры сценариев указывать именно в виде

переменнал=значение

А если нужно передать несколько параметров (например, не только часовой пояс, но и имя пользователя)? Сделаем это следующим образом:

http://example. com/script. cgi?time=+5&name=Vasya

При этом принято разделять параметры с помощью символа &. Будем в дальнейшем придерживаться этого соглашения, поскольку именно таким образом поступают браузеры при обработке форм. (Видели когда-нибудь на странице несколько полей ввода и переключателей, а под ними кнопку Отправить? Это и есть форма, с ее помощью можно автоматизировать процесс передачи данных сценарию.) Ну и, разумеется, сценарий опять же должен адекватно среагировать на эти параметры: провести разбор строки, создать переменные и т. д. Обращаем ваше внимание на то, что все действия придется программировать вручную, если мы хотим воспользоваться языком С.

Способ посылки параметров сценарию, когда данные помещаются в командную строку URL, называется методом get. Фактически, даже если не передается никаких параметров (например, при загрузке статической страницы), все равно применяется метод get. Все? Нет, не все. Существует еще один распространенный способ (не менее распространенный) — метод post, но давайте прежде рассмотрим, на каком языке "общаются" браузер и сервер.

Заголовки запроса и метод GET

Задумаемся на минуту, что же происходит, когда мы набираем в браузере некоторую строку somestring и нажимаем клавишу <Enter>. Браузер посылает серверу запрос somestring? Нет, конечно. Все немного сложнее. Он анализирует строку, выделяет из нее имя сервера и порт (а также имя протокола, но нам это сейчас не интересно), устанавливает соединение с Web-сервером по адресу сервер:порт и посылает ему что-то типа следующего:

GET somestring HTTP/1.0\n ...другая информация... \n\n

Здесь \п означает символ перевода строки, а \п\п — два обязательных символа новой строки, которые являются маркером окончания запроса (точнее, окончания заголовков запроса). Пока мы не пошлем этот маркер, сервер не будет обрабатывать наш запрос.

Как видим, после GET-строки могут следовать и другие строки с информацией, разделенные символом перевода строки. Их обычно формирует браузер. Такие строки




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006