Вступление
Вспышка популярности Web в середине 90-х гг., оттеснившая на задний план Gopher, WAIS, Hyper-G и другие конкурирующие технологии, большей частью своего феноменального успеха была обязана той легкости, с которой разработчики могли связывать механизмы обработки данных с привлекательными интерфейсами Web-страниц. Возможности Web уже не были ограничены сложным программным интерфейсом к немногим языкам программирования; напротив, эта технология предложила общий шлюзовый интерфейс (Common Gateway Interface, или CGI).
CGI — это своего рода болт, который скрепляет Internet. Он не зависит ни от языка, ни от платформы и, что лучше всего, им легко овладеть. Скрипт CGI, генерирующий динамическую Web-страницу, состоит лишь из нескольких строк кода. Ненамного большие затраты труда позволяют принимать данные пользователя из заполненной формы, передавать их в прикладную программу или базу данных для обработки и генерировать новую страницу Web с выводом результатов. CGI позволяет придать любому вновь написанному или старому приложению форму, пригодную для работы через Web.
Почти с самого начала CGI был связан с языком программирования Perl. По сути, для многих CGI и Perl — синонимы. Есть серьезные основания так считать. Если CGI — это крепежная деталь для Internet, то Perl можно уподобить скотчу. Возможности межпроцессной связи Perl наряду с его мощными средствами синтаксического анализа текста создают окружение, которое облегчает объединение разных программных компонентов в единое целое.
Например, типичный сайт электронной коммерции должен "уметь" соединяться с поисковым сервером, отображать страницы каталога с обновленной ценовой информацией из базы данных, управлять "тележкой для покупок", принимать заказы клиентов, проверять кредитные карточки и управлять выполнением заказов. В задачах такого типа Perl превосходит другие языки. Он может посылать запрос на поисковый сервер и преобразовывать результаты его выполнения в Web-страницу с гиперссылками, оперативно генерировать непрерывные страницы каталога исходя из информации базы данных товаров, передавать через сеть информацию кредитной карточки в службу проверки и вводить заказ пользователя в базу данных заказов.
Диапазон передовых приложений, которые уже построены на базе Perl/CGI, по меньшей мере удивителен. Туристические агентства используют Perl/CGI для создания интерактивных карт городов и местностей. В медицинских школах Perl/CGI служит для интерактивного моделирования физиологии человека. В проекте генома человека при помощи Perl/CGI среди участников биологических исследований распространяются генетические карты и последовательности. Perl/CGI также применяется для подключения к Web самых разнообразных устройств, начиная с подводных видеокамер и кончая манипуляторами роботов.
За эти годы технология Web стала намного сложнее. Уже недостаточно только принимать данные пользователя из заполненной формы и генерировать в ответ страницу HTML. Web-сайты должны уметь анализировать XML, генерировать XHTML и DHTML, управлять данными cookie и взаимодействовать со все более и более распределенными конечными системами. Требования пользователей к Web-сайту также возросли. Сегодня пользователи хотят, чтобы Web-сайт запоминал их с прошлого посещения, и чтобы они могли настраивать сайт в соответствии со своими специфическими потребностями.
К счастью, с развитием Web Perl и CGI также достаточно "выросли", чтобы удовлетворять этим требованиям. Эта книга демонстрирует, каким мощным и жизнеспособным остается союз Perl и CGI. На ее страницах вы научитесь, как соединять Web-страницы с базами данных, отслеживать действия пользователей, обмениваться информацией с другими сайтами с помощью XML и "на ходу" генерировать графику и мультипликацию. Кроме того, в этой книге равное внимание уделяется трем другим вопросам, которые часто игнорируются при поспешной разработке Web: безопасности, надежности и масштабируемости.
Я знаю, что комбинация Perl и CGI покажется вам как мощной, так и изящной — какой уже много лет видится она и мне.
Линкольн Штайн
Стонибрук, шт. Нью-Йорк
8 декабря 2000 г.
Предисловие
Цель этой книги
Популярность Perl как языка скриптов CGI стремительно возрастает. Однако в настоящий момент лишь немногие книги охватывают эту тему во всей ее глубине, включая широкий диапазон концепций. Мы хотели, чтобы наша книга помогла читателям научиться применять Perl и убедила их, что это наилучший выбор для создания Web-приложений. Цель этой книги состоит не в обучении языку Perl, хотя она позволяет изучить некоторые приемы и особенности, но в том, чтобы показать, как Perl может выполнять задачи, необходимые во многих нынешних сетевых приложениях. Короче говоря, мы хотели предложить книгу, в которой не только преподаются новые возможности применения Perl, но также читателям предлагаются упражнения с применением этих концепций. Также приводится стандартная документация по Perl. Книга охватывает широкий диапазон концепций и их применение. Пользуясь этими методами, вы сможете написать почти любое приложение Perl/CGI.
Эта книга отличается от другой литературы по Perl и CGI. В ней принят интегральный подход и приводятся приложения, в которых применяются изученные в предшествующих главах понятия. Каждая глава содержит по крайней мере одно специфическое Web-приложение и объяснение его кода строка за строкой (или блок за блоком), так что читатель узнает не только то, что делает скрипт, но и то, как он это делает. Также, чтобы стимулировать самообучение и самостоятельное формирование приложений, каждое приложение сделано работоспособным, но неполным. Мы приводим каркасные приложения, которые могут работать сами по себе, но не вводим в них некоторые функции, которые может добавить читатель (и мы предлагаем ему сделать это в упражнениях) на основе материала текущей и предыдущих глав. Наша цель — не дать вам программы, которые можно просто переписать, а скорее показать, как создавать такие программы самостоятельно.
Краткое содержание глав
Глава 1 "Perl, CGI и эта книга". Эта глава объясняет, что такое Perl и CGI. В ней также приводятся дополнительные сведения об этой книге и объясняется, как использовать модуль CPAN.
Глава 2. "Что вы должны знать". Мы не ожидаем, что читатель будет знать все, но мы надеемся, по крайней мере, на базовый уровень знаний. В этой главе намечено, что вы уже должны знать, и объяснены некоторые вещи, которых вы можете не знать, но должны знать, чтобы получить максимум пользы от этой книги. Это, например, загрязнение данных, вопросы безопасности и устранение неисправностей.
Глава 3. "Использование окружения". В приложениях CGI часто требуется получать от клиента информацию, такую как IP-адрес или данные броузера. В этой главе рассказано, как получить доступ к переменным окружения Web-сервера и что они означают.
Глава 4. "Введение в Web-формы". Немного найдется сетевых приложений, в которых не используются Web-формы какого-то рода. Эти формы позволяют конечному пользователю вводить информацию. В главе 4 рассматриваются элементы HTML Web-форм и способы получения данных от пользователя.
Глава 5. "Работа с cookie". Применение объектов cookie для хранения данных у клиента Web может быть очень полезным для фиксации предпочтений пользователей и данных о них. В этой главе показано, как создавать, получать и использовать cookie.
Глава 6. "Счетчики обращений". Многие люди хотят знать, сколько пользователей посещают их Web-сайт. В примерах этой главы показано, как это реализовать.
Глава 7. "Загрузка файлов на базе Web". Здесь вы узнаете, как, не подвергая сервер опасности, позволить конечным пользователям загружать на него файлы с локальных дисков.
Глава 8. "Отслеживание щелчков". Иногда бывает полезно знать, по каким ссылкам на Web-сайте переходит пользователь и откуда. Примеры в этой главе показывают, как проследить эти действия пользователя.
Глава 9. "Использование mod_perl". Популярный модуль Apache mod_perl может быть чрезвычайно полезен, когда он соответствует приложению. Здесь показано, как сконфигурировать mod_perl, а также как использовать и создавать модули mod_perl на Perl.
Глава 10. "Электронная почта на базе Web". В примерах этой главы демонстрируется соединение с сервером POP3, просмотр электронной почты и вложений и отправка сообщений через Web.
Глава 11. "Введение в DBI и базы данных в Web". В примерах глав 1–10 были представлены основные области применения баз данных. В этой главе Perl DBI рассматривается более подробно.
Глава 12. "Связанные переменные". В этой главе описаны волшебные возможности связывания структур данных с переменными и показано, как это сделать, когда структура представляет собой базу данных.
Глава 13. "Внедрение Perl в HTML с помощью Mason". Ознакомление с этим популярным инструментом и его анализ. В этой главе показано, как встроить Perl в HTML и ускорить разработку при помощи модуля HTML::Mason.
Глава 14. "Управление документами через Web". Теперь вы уже знаете, как загружать файлы на сервер. В этой главе рассматривается дистанционное управление этими файлами через Web.
Глава 15. "Динамическая обработка изображений". Создание диаграмм, графиков, эскизов и галерей и изменение изображений "на ходу" — все эти концепции могут быть полезны в приложениях CGI. Здесь показано, как включить эти функции в программу.
Глава 16. "RSS и XML". XML — еще одна технология с растущей популярностью. В этой главе рассматривается применение XML и его производных — RSS и RDF.
Приложение А. "Коды сервера". Рассматривается значение кодов, возвращаемых Web-сервером.
Приложение Б. "Переменные окружения". Это список наиболее общих переменных окружения Web-сервера.
Приложение В. "Форматы POSIX::strftime()". В этой книге несколько раз применяется модуль POSIX для форматирования строк даты. Здесь приведен список форматов этого модуля и их действие.
Приложение Г. "Общедоступная лицензия". Если вы не прочли копию этого документа, которая поставляется вместе с Perl, это можно сделать здесь.
Приложение Д. "Творческая лицензия". Это другая лицензия, по которой распространяется Perl.
Приложение Е, "Документация к Perl". Список документации, которая поставляется вместе с Perl. Документация из этого списка полезна для интерактивного изучения наряду с этой книгой.
Приложение Ж.. "Коды ASCII". Список символов ASCII и их шестнадцатеричных и десятичных кодов.
Приложение З. "Специальные символы HTML". Список специальных символов, таких как Ј, ® и . Хотя они не определены в Perl, вам, вероятно, рано или поздно понадобятся некоторые из них при создании HTML.
Другие источники
Один из лучших источников по Perl — это документация к Perl и к его различным модулям. В главе 1 показано, как читать эту документацию с помощью команды perldoc. Начальная страница Perl, http://www.perl.com, чрезвычайно полезна своими статьями, советами, документацией, ссылками на другие ресурсы и новостями из мира Perl. Начальная страница Perl Mongers на http://www.perl.org дает хорошую информацию о мире Perl и о преимуществах этого языка. Новости Perl на http://news.perl.org будут сообщать вам о самых последних событиях и выпусках новых модулей. Web-сайт Use Perl на http://use.perl.org — страница сообщества Perl, на которой распространяется и обсуждается информация о нем. Web-сайт документации Perl на http://www.perldoc.com — очень полезный сайт, содержащий новейшую документацию по Perl. Наконец, Perl Monks на http://www.perlmonks.com — еще одно сообщество, участники которого могут задавать вопросы, отвечать на них, вести беседу и делиться знаниями.
Также существуют полезные группы новостей по Perl: comp.lang.perl.announce содержит объявления в области Perl; comp.lang.perl.misc — популярная группа для вопросов, имеющих отношение к Perl, а comp.lang.perl.modules — для представления и обсуждения модулей Perl. Не связанная непосредственно с Perl группа новостей, посвященная CGI — comp.infosystems.www.authoring.cgi. Здесь вы можете обсуждать все вопросы CGI.
Как связаться с нами
Мы будем рады получить известие от вас. Информацию об этой книге и об опечатках можно найти на http://www.perlcgi-book.com и http://www.awl.com.
Благодарности
От Кевина
Создание книги — это целый процесс! Я мог бы назвать многих людей, которые непосредственно, и еще больше тех, которые косвенно помогали мне своей поддержкой, техническими советами и ответами на мои вопросы, когда я проверял свои идеи, выражения и код. В первую очередь я хотел бы поблагодарить мою жену Сузи за терпение, которое она проявляла весь прошлый год, пока я работал над этим проектом. Огромное спасибо моим матери и отцу за всю их поддержку и любовь. Я также хотел бы поблагодарить Элайн Аштон, Криса и Дэйла из OWLS, завсегдатаев конференции EFNET #perl, Скотта Фарлея. "Гладденз", Джона "Гуся" Госселина, Джозефа Холла, группу Hartford Perl Mongers, Клинтона Пирса, Джима Прайка из Netinstitute.com, Питера Скотта, Рэндала Шварца, Денниса Тейлора, Джима Вудгейта, Эда Райта и Иосефа Мендельсона. Я благодарен Марианн Курафас и Мэри Т. О’Брайен из издательства "Эддисон-Уэсли" за то, что они дали Бренту и мне возможность сделать это; Ларри Уоллу, без которого эта книга никогда не была бы написана; и, наконец, моей дочери Кайле, которой я посвящаю эту книгу. Я ожидаю того дня, когда и она начнет работать в Perl.
От Брента
Я хочу начать с благодарности моей жене Крис, которая поддерживала меня все время, пока я писал эту книгу. Я очень восхищен ею. Она много вынесла в течение всего этого процесса и все еще остается со мной. Спасибо, бэби. Моим детям, Люку, Рей и Логену. Вы — мой мир, и я благодарю вас за терпение. Моим родителям — спасибо за всю вашу поддержку! Без вас я не был бы тем, кем я есть сейчас — в буквальном смысле. Особая благодарность Биллу Игеру. Он был моим командиром, когда я служил в ВВС, и именно благодаря ему я смог покинуть службу, когда получил "настоящую работу". Билл верил в меня и помог мне осуществить мою мечту. Такими людьми, как он, военные могут гордиться. Да, еще участники конференции #perl, которые не раз выручали меня! Они были достаточно тактичны, чтобы не смеяться и не перебивать меня, когда я задавал глупые вопросы. Я должен поблагодарить Ларри Уолла, который стоял у истоков этого замечательного языка. Я уверен, что, когда он разрабатывал Perl, ему вовсе не думалось, что это затронет столько людей. В заключение, я искренне благодарю Эла Гора за изобретение Internet. А теперь, парни, поборемся!