ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ Федеральное государственное образовательное бюджетное учреждение высшего профессионального образования «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ им. проф. М. А. БОНЧ-БРУЕВИЧА» Ф. В. Филиппов А. Н. Губин HTTP + РНР В ПРИМЕРАХ И ЗАДАЧАХ УЧЕБНОЕ ПОСОБИЕ САНКТ-ПЕТЕРБУРГ 2015 УДК 004.42(075.8) ББК 32.973-018я73 Ф53 Рецензенты: кандидат технических наук, доцент кафедры процессов управления и информационных систем Национального минерально-сырьевого университета «Горный» С. А. Матюхин, кандидат технических наук, доцент кафедры информационных управляющих систем СПбГУТ В. А. Рогачев Утверждено редакционно-издательским советом СПбГУТ в качестве учебного пособия Филиппов, Ф. В. Ф53 HTTP + РНР в примерах и задачах : учебное пособие / Ф. В. Филиппов, А. Н. Губин ; СПбГУТ. – СПб., 2015. – 68 с. Рассматриваются практические аспекты языка РНР, ис- пользуемые при разработке информационных управляющих систем на базе методов протокола HTTP. Пособие может быть использовано при изучении дисциплин «Технология програм- мирования», «Технологии обработки информации» и «Техноло- гии проектирования программного обеспечения информацион- ных систем». Предназначено для студентов, обучающихся по направле- нию 09.03.02 «Информационные системы и технологии». УДК 004.42(075.8) ББК 32.973-018я73 © Филиппов Ф. В., Губин А. Н., 2015 © Федеральное государственное образовательное бюджетное учреждение высшего профессионального образования «Санкт-Петербургский государственный университет телекоммуникаций им. проф. М. А. Бонч-Бруевича», 2015 2 СОДЕРЖАНИЕ Предисловие ..................................................................................................... 4 1. Протокол НТТР ............................................................................................ 5 2. Локальный веб-сервер XAMPP .................................................................. 13 3. Синтаксис и программные единицы PHP ................................................. 19 Задачи ........................................................................................................... 29 4. Подключение внешних файлов .................................................................. 32 5. Массивы . ....................................................................................................... 34 Задачи ........................................................................................................... 38 6. Функции для работы с датой и временем ................................................. 40 7. Функции для работы со строками .............................................................. 42 8. Файлы и директории . ................................................................................... 44 Задачи ........................................................................................................... 47 9. Загрузка клиентом файлов на сервер ......................................................... 49 10. Регулярные выражения ............................................................................. 51 11. Cookies ........................................................................................................ 59 12. Сессии ......................................................................................................... 62 Задачи ........................................................................................................... 65 Список использованных источников ............................................................. 67 3 ПРЕДИСЛОВИЕ В середине 90-х гг. очень популярной стала технология WWW (World Wide Web) – «всемирная паутина». Это набор протоколов и программ для интернета, представляющих информацию в гипертекстовом формате. Зна- менитый браузер Mosaic, созданный в Национальном центре по примене- нию суперЭВМ (National Center for Supercomputer Applications, NCSA), был первым графическим Web-браузером и способствовал популяризации WWW. Web разработана в 1989 г. в Европейской лаборатории физики час- тиц (European Laboratory for Particle Physics, CERN) Тимоти Бернерсом-Ли (Timothy Berners-Lee). В настоящее время всеми стандартами, имеющими отношение к Web, ведает Консорциум World Wide Web (W3C). Для упаковки и передачи данных в Web применяются протоколы MIME (Multipurpose Internet Mail Extensions), TCP/IP (Transmission Control Protocol/Internet Protocol), FTP (File Transfer Protocol) и Telnet. Специально для Web разработаны указатели URL (Uniform Resource Locator), протокол HTTP (Hyper Text Transfer Protocol), язык HTML (Hyper Text Markup Lan- guage) и интерфейс CGI (Common Gateway Interface). Цель настоящего пособия – познакомить с основными методами про- токола НТТР и их практическим использованием для обмена информацией во всемирной паутине. Все задания на практические и лабораторные рабо- ты выполняются на языке РНР, который фактически является одним из основных средств разработки скриптов серверных приложений. В каче- стве среды выполнения заданий выбрана кроссплатформенная сборка ло- кального веб-сервера ХАМРР, которая, так же как и Денвер, является сво- бодно распространяемым програмным продуктом, но, по мнению авторов, по отношению к последнему обладает некоторыми преимуществами. 4 1. ПРОТОКОЛ НТТР HTTP – это протокол прикладного уровня, который размещается по- верх TCP и в основном известен как транспортный канал для World Wide Web и локальных сетей. Однако это классический протокол, который ис- пользуется помимо гипертекста для многих других задач, например в сер- верах доменных имен и системах распределенного управления объектами посредством своих методов запросов, кодов ошибок и заголовков. Сооб- щение HTTP представляется в MIME-подобном формате; оно содержит метаданные о сообщении (например, тип его содержания и длину) и ин- формацию о запросе и ответе, например метод, используемый для отправ- ки запроса. Существуют два основных компонента, от которых зависит Web: се- тевые протоколы TCP/IP и HTTP. Почти все события в Web происходят через HTTP, и этот протокол преимущественно используется для обмена документами (такими как Web-страницы) в World Wide Web. HTTP – это протокол приложения клиент-сервер, через который взаи- модействуют две системы, обычно использующие соединение TCP/IP. HTTP-сервер – это программа, слушающая на порте машины входящие HTTP-запросы. HTTP-клиент через сокет открывает соединение с сервером, отправля- ет сообщение с запросом на конкретный документ и ждет ответа от серве- ра. Сервер отправляет сообщение, содержащее код нормального или ава- рийного завершения, заголовки с информацией об ответе и (если запрос обработан успешно) требуемый документ. Общий формат HTTP-сообще- ния одинаков для запросов и ответов: начальная-строка заголовок-сообщения (или заголовки) [тело-сообщения] В сообщение может входить любое число заголовков, и каждый из них располагается на отдельной строке (т. е. каждому заголовку пред- шествуют символы возврата каретки и перевода строки). Тело сообщения присутствует необязательно, но если оно имеется, то отделяется от заго- ловков двумя последовательностями CRLF. В протоколе HTTP используются постоянные и непостоянные соеди- нения. Непостоянные соединения применяются по умолчанию в версии 1.0 HTTP, в то время как постоянные соединения – в версии HTTP 1.1. Соедине- ние называют непостоянным (non-persistent connection), если любое TCP-сое- динение закрывается сразу же, как только сервер отправляет клиенту тре- буемый объект. Это означает, что соединение используется только для одного запроса и одного ответа и не сохраняется для других запросов и ответов. 5 В случае постоянных соединений сервер, отправив ответ, оставляет соединение открытым, и, таким образом, следующие запросы и ответы между теми же клиентом и сервером могут отправляться через это же са- мое соединение. Такое соединение сервер закрывает лишь после того, как оно не используется в течение некоторого интервала времени. HTTP-заголовки HTTP-сообщение состоит из начальной строки, за которой следуют набор заголовков, пустая строка и некоторые данные. Начальная строка задает действие, требуемое от сервера, тип возвращаемых данных или код состояния. HTTP-заголовки можно подразделить на три крупные категории: за- головки, посылаемые в запросе, заголовки, посылаемые в ответе, и те, ко- торые можно включать как в запросы, так и в ответы. Заголовки запросов указывают возможности клиента, например, типы документов, которые может обработать клиент, в то время как заголовки ответов предоставляют информацию о возвращенном документе. Заголовки запросов К числу наиболее важных HTTP-заголовков, которые можно включать в запросы, но нельзя включать в ответы, относятся: заголовок Accept Это список MIME-типов, принимаемых клиентом, в формате тип/под- тип. Элементы списка должны разделяться запятыми: Accept: text/html, image/gif, */* Элемент */* указывает, что все типы будут приняты и обработаны клиентом. Если тип запрошенного файла не может быть обработан клиен- том, возвращается ошибка HTTP 406 «Not acceptable» (недопустимо); заголовок From Указывает адрес электронной почты в Интернете учетной записи пользователя, под которой работает клиент, направивший запрос: From: [email protected]; заголовок Referer Позволяет клиенту указать адрес (URI) ресурса, из которого получен запрашиваемый URI. Этот заголовок дает возможность серверу сгенериро- вать список обратных ссылок на ресурсы для будущего анализа, регистра- 6 ции, оптимизированного кэширования и т. д. Он также позволяет просле- живать в целях последующего исправления устаревшие или введенные с ошибками ссылки: Referer: http://www.professorweb.ru Заголовок User-Agent Представляет собой строку, идентифицирующую приложение-клиент (обычно браузер) и платформу, на которой оно выполняется. Общий фор- мат имеет вид: программа/версия библиотека/версий, – но это не неизменный формат: User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 Эта информация может использоваться в статистических целях, для отслеживания нарушений протокола и для автоматического распознавания клиента. Она позволяет приспособить ответ так, чтобы не нарушить огра- ниченные возможности конкретного клиента, например неспособность поддерживать HTML-таблицы. Заголовки ответов В ответы могут включаться следующие заголовки: Заголовок Content-Туре Используется для указания типа данных, отправляемых получателю или, в случае метода HEAD, типа данных, которые были бы отправлены в ответ на запрос GET: Content-Type: text/html Заголовок Expires Представляет собой момент времени, после которого информация в до- кументе становится недостоверной. Клиенты, использующие кэширование, в частности прокси-серверы, не должны хранить в кэше эту копию ресурса после заданного времени, если только состояние копии не было обновлено более поздним обращением к исходному серверу: Expires: Fri, 19 Aug 2012 16:00:00 GMT Заголовок Location Определяет точное расположение другого ресурса, к которому может быть перенаправлен клиент. Если это значение представляет собой полный URL, сервер возвращает клиенту «redirect» для непосредственного извле- чения указанного объекта: Location: http://www.samplesite.com 7 Если ссылка на другой файл относится к серверу, должен указываться частичный URL. Заголовок Server Содержит информацию о программном обеспечении, используемом исходным сервером для обработки запроса: Server: Microsoft-IIS/7.0 Общие заголовки Несколько заголовков могут включаться как в запрос, так и в ответ, например: Заголовок Date Используется для установки даты и времени создания сообщения: Date: Tue, 16 Aug 2012 18:12:31 GMT Заголовок Connection В НТТР/1.0 мы могли использовать в запросе заголовок Connection, указывая, что хотим сохранить соединение после отправки ответа. Теперь такое поведение принято по умолчанию, и в HTTP/1.1 можно использовать заголовок Connection, чтобы указать, что постоянное соединение не нужно: Connection: close HTTP-запросы Каждый клиент посылает запрос, и сервер на него отвечает. Все за- просы и ответы состоят из трех частей, а именно: строки запроса или отве- та, секции заголовков и тела сущности (любого содержания, отправляемо- го вместе с сообщением, например, это страницы HTML для отображения в браузере или данные формы, пересылаемые на сервер). Клиент связывается с сервером в назначенном номере порта (по умол- чанию равном 80) и запрашивает у сервера документ, задавая HTTP- команду, называемую методом, за которой следует адрес документа и но- мер версии HTTP. Клиент также отправляет серверу необязательную ин- формацию в заголовках, чтобы сообщить серверу о своей конфигурации и приемлемых для него форматах документов. Информация заголовка дается в одной строке вместе с именем и значением заголовка. После заголовков клиент посылает пустую строку. Затем клиент отправляет дополнительные данные. Это могут быть данные формы, отправляемые на сервер методом POST, или файл, копируемый на сервер методом PUT. 8 Запросы клиентов подразделяются на три секции. Первая строка со- общения всегда должна содержать HTTP-команду, называемую методом, за которой следуют URI, идентифицирующий файл или ресурс, запраши- ваемый клиентом, и номер версии HTTP: GET /default.aspx HTTP/1.1 Теперь исследуем каждую из этих секций. Метод – это HTTP- команда, начинающая первую строку запроса клиента. Метод информиру- ет сервер о цели запроса клиента. Для HTTP определены семь методов: GET, HEAD, POST, OPTIONS, PUT, DELETE и TRACE, но HTTP-серверы могут также реализовать методы расширения, не определенные протоко- лом HTTP. Заметим, что названия методов зависят от регистра клавиатуры, поэтому, например, слово get не будет распознано как допустимый метод. Метод GET используется для запроса информации, расположение которой на сервере определяется заданным URI. Этот метод широко применяется браузерами, чтобы извлекать документы для просмотра. Результат запроса GET генерируется разными способами. Это может быть файл, доступный с сервера, вывод программы, вывод, полученный на устройстве, и т. д. Когда клиент в своем запросе использует метод GET, сервер отправ- ляет ответ, содержащий строку состояния, заголовки и метаданные. Если сервер не может обработать запрос из-за ошибки или отсутствия авториза- ции, он отправляет объяснение в текстовом виде, помещая его в ответе в секцию данных. Секция тела о сути запроса GET всегда остается пустой. Запрошенный клиентом ресурс (файл или программа) идентифицируется по его полному пути на сервере. Любая дополнительная информация, например значения из формы, которую клиенту нужно отправить серверу, присоединяется вслед за URI как строка запроса: GET /default.aspx?name=Alex HTTP/1.1 Метод HEAD функционально аналогичен методу GET, не считая то- го, что сервер ничего не помещает в секцию данных ответа. Методом HEAD запрашивается только заголовочная информация по файлу или ре- сурсу. Для запроса HEAD HTTP-сервер должен отправить в заголовках ту же информацию, которую он бы отправил в ответ на запрос GET. Дан- ный метод используется, если клиенту нужна информация о документе, но не нужно получать сам документ. Метод POST позволяет отправить данные серверу в клиентском запросе. Эти данные посылаются программе обработки данных, к кото- рой у сервера есть доступ. Метод POST может использоваться для многих приложений, например для обеспечения входных данных сетевых служб, 9 программ интерфейса командной строки и т. д. Данные отправляются на сервер в секции тела клиентского запроса. Обработав запрос POST и заго- ловки, сервер передает это тело программе, указанной в URI. В методе OPTIONS запрашивается информация о поддержке HTTP на Web-cepвeре. Метод OPTIONS может применяться с URL, чтобы извлечь информацию о конкретном документе или (с групповым символом *), что- бы получить информацию о возможностях сервера в целом. Информация возвращается в заголовках ответа. HTTP-ответы Препроцессная обработка на стороне сервера подразумевает вызов программы-интерпретатора, которая обрабатывает запрашиваемый файл скрипта, исполняет его команды. Результат работы интерпретатора переда- ется веб-серверу, который, в свою очередь, возвращает их клиенту (рис. 1). Рис. 1. Препроцессинг HTML на сервере Ответ сервера на запрос клиента также подразделяется на три части. Первая строка – это строка ответа сервера, содержащая номер версии HTTP, код состояния, указывающий состояние запроса, и краткую фразу, описывающую это состояние. Далее следует информация заголовков, за ней – пустая строка и тело сущности (которое может быть пустым, например в ответах на запросы HEAD и OPTIONS). В качестве версии HTTP указывается та версия, которую сервер ис- пользует в ответе. Код состояния представляет собой трехбайтовое число, определяющее результат обработки сервером запроса клиента. Описание, следующее за кодом состояния, просто дает удобное для восприятия поль- зователем значение кода состояния. Хотя существует несколько опреде- ленных кодов состояния, сервер вправе устанавливать дополнительные ко- ды. Некоторые наиболее распространенные коды приведены в табл. 1. 10