Большую часть времени PHP работает как часть веб-сервера, посылая
информацию броузерам. Даже если его запускают из командной строки, он, как правило, выполняет задачу и выводит некоторую информацию. Тем не менее PHP может быть также полезен и в качестве веб-броузера – получая доступ к определенным URL и обрабатывая их содержимое. Большинство рецептов этой главы посвящено получению
доступа к URL и обработке результатов, хотя здесь обсуждаются и некоторые другие задачи, такие как использование шаблонов и обработка серверных протоколов.
В PHP есть четыре способа доступа к удаленным URL. Выбор зависит от
того, насколько доступ должен быть простым, управляемым и переносимым. Эти четыре способа реализуются посредством функций fopen()
и fsockopen(), расширения c URL или класса HTTP_Request в PEAR.
С функцией fopen() работать просто и удобно. Она рассматривается в
рецепте-Получение содержимого URL методом GET Функция fopen() поддерживает перенаправления, поэтому если она применяется для получения доступа к каталогу http://www.example.com/people, а сервер переадресует вас к http://www.example.com/people/, то в результате будет получена страница с индексом
каталогов, а не сообщение о том, что URL был перемещен. Функция
fopen() также работает и с HTTP и с FTP. Оборотная сторона функции
fopen() заключается в том, что она может обрабатывать только HTTP-запросы GET (не HEAD или POST), вместе с запросом невозможно посылать дополнительные заголовки или любые cookies, и получить
можно только содержимое ответа, но не его заголовки.
Работа с функцией fsockopen() требует больше затрат, но предоставляет большую гибкость. Функция fsockopen() показана в рецепте-Извлечение содержимого URL с помощью
метода POST
После открытия сокета с помощью функции fsockopen() необходимо
послать соответствующий HTTP-запрос на данный сокет, а затем прочитать и проанализировать ответ. Это позволяет добавлять заголовки
к запросу и предоставляет доступ ко всем заголовкам ответа. Однако
при этом надо написать дополнительный код, для того чтобы правильно проанализировать ответ и предпринять соответствующее действие,
например, последовать переадресации.
Если у вас есть доступ к расширению c URL или к классу HTTP_Request
в PEAR, то следует применять эти инструменты, а не функцию fsockopen(). Расширение c URL поддерживает множество различных протоколов (включая HTTPS, рассмотренный в рецепте-Получение содержимого HTTPS URL) и предоставляет доступ к заголовкам ответа. Мы используем расширение c URL
в большинстве рецептов этой главы. Для того чтобы с этим расширением можно было работать, необходимо инсталлировать библиотеку
cURL, доступную на http://curl.haxx.se. Кроме того, PHP должен быть
собран с ключом--with-curl.
Класс PEAR HTTP_Request, не поддерживает HTTPS, но предоставляет доступ к заголовкам и может использовать любой метод HTTP. Если этот модуль PEAR не установлен, то его можно загрузить с http://pear.php.net/get/HTTP_Request. Как только файлы модуля окажутся в каталоге include_path, с ними можно будет работать, обеспечивая хорошую переносимость решения.
Рецепт-Отладка обмена заголовками HTTP- помогает проникнуть за кулисы HTTP-запроса, чтобы исследовать заголовки запроса и ответа. Если запрос, конструируемый
в программе, не дает желаемого результата, то изучение заголовков
часто дает ключ к разгадке причины ошибки.
Рецепты с-Выделение информации на веб-странице по-Удаление тегов HTML и PHP- помогут организовать обработку содержимого
веб-страницы, загруженной в программу. В первом из них показано,
как отмечать определенные слова на странице цветными блоками.
Этот способ полезен, например, для подсвечивания условий поиска.
Рецепт-Извлечение ссылок из HTML-файла- содержит функцию для нахождения всех ссылок на странице. Это важный строительный блок для создания веб-паука (web spider) или системы контроля ссылок. Преобразованию простого ASCII-текста в HTML посвящены рецепты-Преобразование ASCII в HTMLи-Преобразование HTML в ASCII. Рецепт-Удаление тегов HTML и PHP- показывает, как удалить все HTML- и PHP-теги из веб-страницы.
Другой вид работы со страницами состоит в применении системы шаблонов. Шаблоны, а они рассматриваются в рецепте-Использование шаблонов системы Smarty-, позволяют
как угодно изменять внешний вид ваших веб-страниц, не меняя кода
PHP, заполняющего страницы динамическими данными. Точно так
же можно изменять код программы управления страницами, не затрагивая внешний вид последних. Рецепт-Анализ файла протокола веб-сервера- посвящен общей задаче администрирования сервера – анализу файлов протоколов доступа
к веб-сайту.
Для примера две программы используют инструмент извлечения ссылок, описанный в рецепте-Определение количества строк,
возвращенных запросом-. Программа в рецепте-Программа: обнаружение устаревших
сылок- просматривает ссылки на странице и сообщает, какие ссылки еще действительны, какие были перемещены, а какие больше не работают.
Программа
в рецепте-Программа: обнаружение устаревших
сылок-докладывает о состоянии ссылок. Она сообщает, перемещалась ли страница, на которую ссылаются, и когда она была изменена последний раз.