PHP: интерактивность в действии
Web-программирование
🕛 29.12.2008, 03:51
Когда-то давно, еще в прошлом веке, для того, чтобы сделать сайт "на мировом уровне", доста-точно было просто уметь делать web-страницы на HTML и обладать художественным вкусом. Спустя некоторое время требования усложнились: использование JavaScript и Dynamic HTML стало рутин-ным и дизайн сайта, не имеющего подобных "украшений", считался устаревшим. Вскоре правилом "хорошего тона" для корпоративного сайта стало применение сложных программ на Perl или C++, а создавать такие сайты стало по силам лишь крупным дизайнерским студиям.Однако простые web-дизайнеры не желали мириться с такой ситуацией. И на свет появился PHP - язык программирования, обладающий возможностями сложных скриптовых языков, но в то же время удивительно простой и легкий в изучении и применении. О нем и пойдет дальше рассказ.
Определения
Web-программирование - разработка любых программных продуктов, предназначенных для ра-боты на сайтах World Wide Web. Строго говоря, даже разработка web-страниц на чистом HTML явля-ется web-программированием, ведь при просмотре страницы браузер фактически исполняет код HTML, форматируя текст согласно инструкциям этого языка. В настоящее время под web-программированием понимают создание CGI-приложений и использование на web-странице техноло-гий JavaScript и VBScript для достижений сложных эффектов.
Web-сервер - программа, запущенная на узле сети Интернет и выдающая посетителям этого узла web-страницы с него по их запросам. Также web-сервером часто называется узел, на котором эта программа запущена, или даже компьютер, являющийся таким узлом.
CGI (сокращение от Common Gateway Interface) - технология, позволяющая запускать на web-сервере программы, могущие получать данные от посетителей сайтов, поддерживаемых этим web-сервером, и в свою очередь выдавать им обработанные данные в виде web-страниц или других фай-лов. Для использования технологии CGI программа-web-сервер должна удовлетворять определен-ным критериям - "поддерживать CGI". Если программа, запускаемая на web-сервере, представлена не двоичным кодом (т.е. скомпилированным файлом), а текстовым, то для ее выполнения требуется программа-интерпретатор того языка, на котором написана эта программа. Такой интерпретатор включается в состав web-сервера и вызывается им при необходимости заняться выполнением про-граммного кода.
CGI-сценарий (CGI-скрипт) - программа (в текстовом виде), предназначенная для исполнения на web-сервере. Для создания CGI-скриптов можно использовать любой язык программирования - важно лишь, чтобы на том web-сервере, где предполагается эту программу запускать, имелся интерпрета-тор этого языка. В настоящее время наиболее частоиспользумыми языками CGI-программирования являются PHP, Perl, C++.
Web-программирование
Все языки программирования, используемые при разработке web-сайтов, можно разделить на две большие группы.
К первой будут относиться те из них, код которых выполняется на компьютере посетителя сайта - в его браузере. Это известные всем JavaScript, VBScript, Java-апплеты. Программы на этих языках встраиваются в код web-страниц (или выносятся в отдельный файл с вызовом из web-страниц, но браузер все равно обрабатывает такие вынесенные программы как если бы они были встроены в код страницы).
Во вторую же группу можно включить те языки, программы на которых выполняются на том ком-пьютере, где расположен web-сервер. Эта группа будет гораздо более обширной, - дело в том, что в принципе на web-сервере могут исполняться программы на любом языке (даже командных .bat-файлов MS-DOS), важно лишь, чтобы на нем была установлена программа-интерпретатор этого язы-ка, удовлетворяющая особым требованиям - стандарту CGI, которым также должен удовлетворять сам web-сервер.
PHP относится ко второй группе - программа на PHP исполняется на web-сервере. Однако от дру-гих CGI-языков PHP очень сильно отличается в лучшую сторону, - прежде всего своей простотой. Создавая программы на PHP, нет необходимости учитывать все те многочисленные мелочи, которые отравляют жизнь программистам на Perl или C++: не надо заботиться о правах доступа к файлам сценария, не надо прописывать точные пути к различным модулям, нет необходимости следить за отсутствием в файле скрипта недопустимых символов. Синтаксис языка таков, что он допускает его легкое освоение как начинающим программистом, так и тем, кто уже использовал ранее какой-либо язык программирования. Для тестирования PHP-программ на локальном компьютере необязательно устанавливать на нем ту же операционную систему, что и у провайдера хостинга сайта, где эти про-граммы будут применяться, - достаточно лишь установить соответствующей web-сервер и подклю-чить к нему модуль PHP. Можно целиком и полностью сосредоточиться на решаемой задаче и не ду-мать о мелочах. Именно это и делает PHP весьма хорошим выбором для web-дизайнера, который, начав его использовать, может вообще забыть о каких-либо других CGI-языках.
Немного истории
В отличие от многих других языков программирования, PHP был создан не какой-либо корпораци-ей или гением-программистом, а обычным пользователем, Расмусом Лердорфом, в далеком 1994 году. Цель разработки языка была проста - сделать домашнюю страничку Расмуса более интерактив-ной, а значит, и более привлекательной для посетителей. Расмус разработал базовый синтаксис и написал первый интерпретатор своего языка, получившего название Personal Home Page Tools - т.е. PHP. Этот интерпретатор мог обрабатывать лишь несколько основных команд, однако начало было положено.
В 1995 году Расмус доработал интерпретатор PHP, соединив его с другой своей программой, умевшей обрабатывать HTML-формы (именовавшейся FI - от "Form Interpretator"), а также сделал так, что интерпретатор, получивший название PHP/FI Version 2, мог становиться частью web-сервера. По-следнее сделало программы на PHP очень быстроисполняющимися. Кроме того, в том же 1995 году интерпретатор PHP был дополнен возможностями обработки новых команд, в частности, функций работы с сервером баз данных MySQL и автоматического создания gif-файлов (последнее, к примеру, может быть использовано для генерации кнопок-счетчиков посещений). PHP/FI был размещен в Сети для всеобщего использования, и началось его повсеместное распространение.
Web-мастера быстро оценили достоинства нового языка web-программирования - легкость освое-ния и богатство возможностей, и вскоре традиционные Perl, C++ стали сдавать ему свои позиции. Так как исходный код интерпретатора был открыт (а сам он, ясное дело, бесплатен), то энтузиасты стали заниматься его доработкой, и летом 1998 года появился на свет PHP3 - детище Зива Сураски и Энди Гутманса (Zeev Suraski and Andi Gutmans). В этой версии интерпретатора были исправлены баги пре-дыдущей версии и добавлены новые функции, что еще больше поспособствовало его победному ше-ствию по миру. Уже к концу 1999 года число сайтов, построенных на основе PHP, перевалило за мил-лион. Весьма важным достоинством PHP также являлось то, что его можно было использовать в раз-личных операционных системах - от Windows до Unix и Linux.
В 2000-м году вышла четвертая версия интерпретатора PHP, разработанная компанией Zend Technologies, дополненная множеством новых функций. В настоящее время именно она является наиболее распространенной.
С чего начать?
Основным источником сведений по PHP является официальный сайт его разработчиков - www.php.net. Однако тем, кто желает разработать сайт с применением PHP, лучше прежде всего по-сетить русский сайт "PHP по-русски", расположенный по адресу http://php.spb.ru, и загрузить с него два файла - полное описание PHP на русском языке (точный перевод руководства по PHP с сайта www.php.net) и web-сервер Apache с PHP-модулем, сконфигурированным для немедленного исполь-зования. Оба файла подготовил и разместил в Сети ведущий этого сайта Дмитрий Бородин.
Готовый к использованию web-сервер вместе с интерпретатором PHP, а также системой управле-ния базами данных MySQL вы также можете найти на сайте проекта "Денвер", расположенном по ад-ресу http://dklab.ru/chicken/web. В отличие от вышеупомянутого ресурса "PHP по-русски", ведущие проекта "Денвер" Дмитрий Котеров, Дмитрий Короленко, Игорь Светликов и Андрей Любченко регу-лярно обновляют свой проект, постоянно размещая на нем свежие версии web-сервера с набором компонентов. Однако установка "Денвера" более автоматизирована, нежели набора с сайта "PHP по-русски", и предусматривает значительно меньшую ее "управляемость".
"Денвер" можно порекомендовать тем, кто предпочитает автоматически получить на своем ком-пьютере готовый к использованию web-сервер в целях изучения языка PHP и создания на нем про-грамм, а "PHP по-русски" понравится тому, кто привык все, что ему надо, настраивать сам. Тем более что последнее будет весьма легко - достаточно внимательно прочитать комментарий Дмитрия с сайта и файлы Readme из дистрибутива.
Итак, первым делом установите на своем компьютере web-сервер Apache - из "Денвера" или "PHP по-русски" и освойте его использование. После этого вы сможете полноценно работать с программа-ми на PHP на своем компьютере, не выходя в Интернет, например, тестировать разработанные с ис-пользованием PHP сайты.
Ну, а затем приступайте к изучению языка. В этой главе книги изложены самые основные его по-нятия и описаны базовые команды, с помощью которых можно создать неплохие PHP-программы. За остальной информацией обращайтесь к описанию языка, тем более что оно переведено на русский язык и снабжено массой примеров кода. Только помните, что в том дистрибутиве web-сервера, о ко-тором говорилось выше, отсутствуют модули, расширяющие возможности PHP, так что некоторые разделы описания будут неактуальны. Впрочем, ничего не мешает вам загрузить нужные модули от-дельно и установить их (на сайте http://php.spb.ru описано, как это сделать), однако первое время такая необходимость у вас вряд ли появится.
На сайте http://phpclub.unet.ru вы найдете множество примеров сценариев на PHP, сможете загру-зить литературу на русском языке, получить от профессионалов в web-программировании ответ на свой вопрос или принять участие в каком-либо обсуждении или пообщаться с коллегами в чате. Ар-хив Форума, расположенного на этом сайте, содержит в себе ответы практически на все мыслимые и немыслимые вопросы по web-программированию на PHP. Также здесь регулярно публикуются ново-сти мира PHP-программирования, рассказывается о новых разработках в этой области, размещается информация о вакансиях web-дизайнеров и программистов на рынке труда. Также немало полезной информации есть в Web-клубе по адресу http://www.webclub.ru/materials/php3, в частности, руково-дство по PHP, представленное на сайте "PHP для всех", изначально размещалось именно там.
Для написания кода на PHP подходит любой текстовый редактор - от "Блокнота" до "Script Editor'а" из пакета Microsoft Office, здесь выбор зависит от вашего личного вкуса и желания.
В RuNet'е использовать PHP разрешается, например, на таких бесплатных серверах, как http://www.h1.ru, http://meridian.tomsk.ru, http://webservis.ru, http://www.hut.ru, http://wallst.ru, на ино-странных - http://www.saxen.net и других. Однако при выборе бесплатного хостинга для размещения сайта помните, что в подавляющем большинстве случаев вам придется в обязательном порядке раз-мещать на своих страницах рекламные баннеры (за их показ на вашем сайте компании, владеющей сервером хостинга, рекламодатели платят деньги, которые, собственно, и служат оплатой поддержки размещенных на этом сервере сайтов). Кроме того, весьма часто владельцы хостингов с поддержкой PHP и других CGI-языков запрещают размещать на сайтах, расположенных у них, файлы zip, rar, exe, mp3. Впрочем, последнее условие можно обойти, использовав для хранения таких файлов другой бесплатный сервер, - пусть и без поддержки PHP.
На рынке платного хостинга ситуация другая - сейчас уже трудно найти хостинг, где бы не предла-гали использовать PHP. Тарифные планы, не предполагающие использование PHP, сохранились разве что у некоторых провайдеров услуг доступа в Интернет, параллельно предоставляющих и услугу размещения web-сайтов за отдельную плату. Так что для построения сайтов, использующих PHP, можно выбирать практически любой сервер платного хостинга, оценивая его по различным другим критериям (цена, надежность, скорость и т.д.). Достаточно трудно рекомендовать какую-либо определенную фирму, однако можете попробовать ValueHost (www.valuehost.ru), www.350mb.ru, www.net.ru и другие.
Более подробно о PHP вы можете узнать из специализированной литературы, например, из книги "PHP: полезные приемы", готовящейся в настоящее время к выходу в свет в издательстве "Горячая линия - Телеком". При подготовке данной главы использовались материалы из этой книги.
Ниже будет рассказано об основах PHP. Весь нижеследующий текст рассчитан на тех, кто имеет хотя бы общее представление о программировании и может понять принципы работы с PHP на осно-вании сравнения его с другими языками. Если такового опыта у вас нет, то для изучения PHP вос-пользуйтесь специальной литературой или Интернет-публикациями - к сожалению, делать книгу об Интернете еще и учебником по программированию у нас возможности нет.
Основы языка
Синтаксис PHP прост. Программы на PHP встраиваются в текст web-страницы так же, как и сце-нарии на JavaScript, VBScript, - окаймляясь угловыми скобками с указанием языка: <?php ... текст про-граммы ... >. Команды PHP обязательно разделяются символом точки с запятой - ";" (символы конца абзаца или конца строки не учитывается никак), после последней в программе команды его можно не ставить. Также символ ";" не ставится после условных операторов и операторов цикла.
Пример программы на PHP вы можете увидеть на рис.19.1.
Как и во всех языках программирования, в PHP есть возможность работать с переменными - не-киими обьектами, имеющими имя и могущими принимать различные значения. Однако работа с пе-ременными в PHP, пожалуй, самая легкая из всех возможных. Переменные не надо заранее обьяв-лять (если не знаете, что это такое - и не надо), за исключением использования их в функциях, для введения новой переменной достаточно просто присвоить ей какое-либо значение, а для помещения значения переменной в строку текста, имя файла или параметр команды нужно просто написать ее имя в том месте, где должно быть ее значение.
Чтобы PHP мог отличать переменные от строк или команд, ее имя должно начинаться со знака доллара - "$" и не должно содержать пробелов или знаков апострофа и некоторых других. При анализе программного кода интерпретатор PHP считает именем переменной все, что содержится между $ и ближайшим к нему символом, недопустимым в имени переменной.
Переменные в PHP могут быть четырех типов - число (целое и дробное), строка текста, массив и обьект. Интерпретатор PHP автоматически определяет тип переменной на основании анализа ее со-держимого. Подробнее о типах данных вы можете узнать в руководстве по PHP, там же рассказано и об особенностях работы с массивами (и вообще обьяснено, что это такое, если вы еще не знаете).
Помните, что для включения переменной в строку текста нельзя использовать символ "+" - он пригоден лишь для числовых выражений. Достаточно просто поместить переменную туда, где она должна стоять - например, в итоге выполнения кода $a="птица певчая"; $b="Дятел - $a" переменной $b будет присвоено значение "дятел - птица певчая".
Довольно часто используются сокращенные обозначения арифметических действий над пере-менными и действий по присваиванию им каких-либо значений. Например, команда $a++ означает, что переменную $a надо увеличить на единицу, а команда $a+=3 - увеличить на 3, что и будет сделано, если она имеет числовой формат.
Ниже будут перечислены некоторые основные команды PHP, которых вполне хватит для реали-зации несложных проектов. Для более полного ознакомления с командами PHP можно изучить Руко-водство по этому языку, доступное, например, с адреса http://php.spb.ru или другие публикации.
- include "имя файла" - команда для включения содержимого одного файла в другой. Содержи-мое того файла, имя которого указывается в команде, целиком и полностью вставляется на то место, где располагается эта функция, при этом все коды PHP, содержащиеся во вставляемом файле, ис-полняются так же, как если бы они были на месте этой функции. Пример можно увидеть на рис. .
- mail ("Кому", "Тема", "Текст сообщения", "Дополнительные заголовки") - отправка почтового сообщения. При выполнении данной команды на сервере формируется электронное письмо в соот-ветствии с указанными параметрами и отправляется с помощью серверной почтовой программы. В качестве параметра "Кому" может выступать набор адресов, разделенных запятыми. "Дополнитель-ные заголовки" могут быть совершенно любые, разделяться они должны комбинацией символов /n, которая в PHP означает перевод строки. Пример использования функции mail вы можете увидеть ни-же, в описании устройства электронного магазина. (Если среди "Дополнительных заголовков" не ука-зано поле From, то оно заполняется по умолчанию, например, именем "Unprivileged User".)
- echo "текст" ¬- вывод на web-страницу какого-либо текста. Чтобы вывести на web-страницу значение какой-либо переменной, достаточно просто написать ее имя внутри выводимой строки: ко-манда echo "это цифра $a" выведет в web-страницу текст "это цифра 1", если ранее переменной $a присваивалось значение единицы.
- if (условие) {…команды, которые должны выполняться, если условие верно…;} else {…команды, которые должны выполняться, если условие неверно…} - команда, позволяющая выполнить то или иное действие в зависимости от верности или неверности того или иного условия. В фигурных скобках может располагаться несколько команд, разделенных точкой с запятой. В качестве условия может быть оператор сравнения "равно" - "==" (именно два знака равенства!), "больше" - ">", "меньше" - "<" и их комбинации - скажем, "<=" - "меньше или равно". Можно использовать и несколько условий, взяв каждое из них, а также все вместе в скобки и разделяя знаками "&&" - "и" или "||" - "или".
Для того, чтобы выполнять различные команды в зависимости от условия, могущего принимать три или больше значений, следует использовать оператор switch (описание смотрите в руководстве), - аналог оператора case в VBA и некоторых других языках.
- for (начальное значение счетчика, условие продолжения цикла, изменение счетчика на каждом цикле) {...команды...;} - цикл, то есть повторение указанных в нем команд столько раз, сколько позволет условие изменения счетчика (т.е. переменной, специально выделенной для подсчета числа выполнений команд цикла). К примеру цикл for ($i = 1; $i <= 10; $i++) {echo $i;} выводит в web-страницу числа с 1 до 10, так как в нем изначально устанавливается значение счетчика в 1 - $i=1, каждый цикл его значение увеличивается на 1 - $i++, а продолжаться он будет до тех пор, пока значение счетчика не превысит 10 (т.е. пока $i<=10).
Также в PHP можно использовать циклы без открытого обьявления числа повторений - while (ус-ловие) {...команды...;} и do {...команды...} while (условие);. Описание их смотрите в руководстве по PHP, отличаются же они тем, что второй цикл (do…while) будет в любом случае выполнен не менее одного раза.
Программа на PHP может прерываться кодом web-страницы, - для этого достаточно вставить за-крывающий тэг до этого кода и открывающий - после. Все, что находится между ними, будет выда-ваться в браузер без какой-либо обработки, рассматриваясь как выводимое с помощью команды echo. Иными словами, код
<?php if ($a==1) { ?><p>Переменная а равна 1</p><?php }?>
эквивалентен коду
<?php if ($a==1) {echo "<p> Переменная а равна 1</p>";} ?>,
однако первый вариант меньше нагружает процессор компьютера, на котором расположен интер-претатор PHP.
Из сказанного также следует, что все программы на PHP, расположенные на одной web-странице, представляют из себя одну большую программу, - несмотря на то, что они разделяются блоками обычного текста страницы. Именно поэтому переменная, обьявленная в расположенном в начале страницы коде, сохраняет свое значение не только до ее конца, но и во всех присоединяемых с по-мощью команды include файлах. Вот, к примеру, демонстрация этого - рис.19.1.
Рис.19.1. Пример PHP-кода. Посмотрите внимательно на код (окна слева) и итог его выполнения (окно браузера справа). Обратите внимание, что переменная a, которой присвоено значение еще в первом программном блоке левой страницы, сохранила его не только в других ее блоках, но и в программе, расположенной во включаемой с помощью команды include страницы.
Однако помните, что если вы создаете функцию на PHP (попросту вставляя в программу инструк-цию Function имя () {...команды функции...} с целью потом ее вызывать командой имя), то переменные, обьявленные в ней, по умолчанию имеют установленное значение только внутри функции. Кроме того, также по умолчанию переменные, обьявленные вне функции, в ней самой никакого значения не имеют. Подробнее о функциях и о переменных в них читайте в руководстве по PHP, например, с того же сайта http://php.spb.ru.
Обычно web-сервер настраивается так, что на предмет наличия программ на PHP просматрива-ются файлы, имеющие расширение .php, .phtml, остальные же файлы передаются в браузер пользо-вателя без поиска в них команд PHP. Делается так для более быстрой работы сервера, а также для обеспечения возможности установки на сервере разных интерпретаторов (например, SSI - Server Side Includes, в технологии, в какой-то мере предшествовавшей PHP), так как тогда каждому из интерпре-таторов назначаются свои расширения для обработки соответствующих файлов.
Так как PHP-код полностью исполняется на web-сервере, то в страницах, выдаваемых браузеру, он будет отсутствовать, и если кто заинтересуется вашим опытом программирования, то вам придет-ся отправлять ему этот код по почте, так как при просмотре сайта каким-нибудь образом узнать ис-ходный PHP-код его страниц нельзя.
Работа с формами
Значения переменных можно передавать между различными страницами сайта - с помощью ис-пользования форм. Формой называется конструкция, состоящая из поименованных элементов осо-бых типов, заключенных между HTML-тэгами <form…> и </form>. В качестве элементов формы могут выступать поля ввода текста, кнопки, выпадающие меню, переключатели, квадратики для отметки галочкой - checkbox'ы, а также картинки формата jpg или gif.
Наиболее важным свойством формы является то, что в ее заголовке - в открывающем тэге <form…> можно указать адрес какого-либо файла, и тогда при его загрузке в программный код этого файла, если он будет там присутствовать, передадутся значения всех переменных, установленных в этой форме - в частности, значения всех элементов формы, как если бы эти значения были установ-лены в программе, расположенной в самом загружаемом файле. Таким образом можно передавать значения переменных между различными web-страницами, используя их в программном коде. Имена переменных соответствуют тем именам, которые были даны элементам формы в их тэгах, а значения - соответственно значениям этих элементов: для поля ввода текста - введенному тексту, для пере-ключателя или checkbox'а - True при отмеченном и False при неотмеченном, для рисунка - координаты указателя мыши относительно верхнего левого угла изображения, для выпадающего меню (элемент <select name="имя"><option value="text1">text</option>…</select>) - значение параметра value выбранного пункта option.
Пример создания и применения формы приведен ниже, в разделе "Практическое использование".
Зачем он нужен?
Можно спросить: а зачем же может вообще потребоваться PHP? Разве обычных HTML и пары JavaScript не достаточно для создания красивой web-страницы?
Ну, во-первых, PHP может очень серьезно облегчить работу создателя сайта. С помощью коман-ды include() можно автоматически вставлять один и тот же фрагмент HTML-кода во множество стра-ниц, просто поместив в них эту команду с именем файла, содержащего код общей части. Причем этот код тоже может меняться в зависимости от страницы, в которую он включается, - достаточно в этой странице установить значение какой-либо переменной, а в коде общей части поместить инструкцию if, результат работы которой зависит от этого значения. В результате для обновления такой общей части будет достаточно отредактировать один файл - тот, который ее, собственно, и содержит, - и тогда для посетителей сайта соответственно изменятся все его страницы, как если бы вы все их вручную отредактировали.
Работа web-мастера по поддержке сайта при использовании PHP заметно облегчается. К приме-ру, немного поработав, можно сделать сценарий, "пробегающий" по всем файлам в каком-либо ката-логе и "вытаскивающий" оттуда какие-либо фрагменты (например, содержимое тэгов "meta" - функция get_meta_tags). Таким образом можно, скажем, автоматически создавать оглавления журналов или библиотек: стоит поместить в каталог новую статью (оформленную согласно определенным прави-лам), как она тут же станет появляться в оглавлении на главной странице без необходимости эту главную страницу обновлять вручную.
С помощью PHP можно серьезно облегчить частое обновление страницы - так, если страница со-держит часто меняющуюся вставку (например, новости), то будет неплохо поместить на место этих новостей инструкцию include ("file"), а в этом файле разместить текст новостей. В результате при об-новлении новостей редактированию придется подвергать лишь сам их текст, а не HTML-код заглавной страницы, что и самому делать легче, и неопытному помощнику доверить можно.
Помощь web-мастеру и службе поддержки web-ресурса - это лишь весьма малая часть функций PHP. Используя PHP, можно обогатить сайт огромным количеством новых возможностей, делающих его удобным и нужным для посетителя. Так, с помощью функции mail() легко обеспечить отправку почтового сообщения по какому-либо адресу со страниц сайта, - например, мнения посетителя о сай-те или вопроса его владельцу. Сделать гостевую книгу, чат или форум на PHP тоже возможно, в Сети нетрудно найти немало уже готовых подобных сценариев. В следующем разделе будет рассказано, как с помощью PHP улучшить удобство работы с сайтом, содержащим множество однотипных небольших разделов, или создать мини-Интернет-магазин.
Одним из наиболее заметных достоинств PHP является возможность легкой работы с серверами баз данных. Ранее, до появления этого языка, задание, выражающееся словами "приделать базу данных к web-странице", было довольно трудным и малодоступным для начинающих web-дизайнеров. Приходилось либо самостоятельно разрабатывать хитроумные скрипты, взаимодействующие как с программой управления базой данных, так и с web-страницами сайта, либо закупать их у фирм-разработчиков. С помощью же PHP использование базы данных на сайте стало чуть ли не элементарным. Для работы с подавляющим большинством типов баз данных в PHP есть встроенные функции, поэтому теперь для достаточно лишь установить на web-сервере программу работы с базой данных (наиболее часто используется бесплатная MySQL - http://www.mysql.com) и включить в текст PHP-сценария команды работы с нею (их список приведен в описании языка вместе с примерами использования).
Возможности PHP можно весьма серьезно расширить с помощью дополнительных модулей, со-держащих различные функции. Эти модули при необходимости размещаются на web-сервере, на ко-тором установлен PHP-интерпретатор. Их можно загрузить с адреса http://www.php.net, там же в раз-деле документации приведено и полное их описание. (В том web-сервере с установленным PHP, ко-торый распространяется с сайта http://php.spb.ru, никаких дополнительных модулей нет для умень-шения размера дистрибутива.) Например, модуль Zlib позволяет работать из программы на PHP с архивами в формате Gzip, а модуль libswf - с Flash-презентациями, создавая их и редактируя прямо из программы на сервере. Так как PHP - развивающийся язык, то новые модули появляются довольно часто, однако использовать их можно лишь после установки на web-сервер, что провайдеры хостин-говых услуг могут не сделать. Поэтому при желании использовать функции из какого-либо модуля нужно сначала проверить, поддерживает ли их web-сервер, на котором вы собираетесь размещать сайт.
Сделать это можно, либо разместив на сервере страницу со строчкой <?php phpinfo() ?> и загру-зив ее с сервера в браузер (на ней будет отображена информация о версии PHP, параметрах web-сервера и многом другом, в том числе дополнительных модулях), либо попросту задав вопрос группе технической поддержки сервера.
PHP можно использовать и для написания полноценных программ, работающих и на локальном компьютере и не требующих для своего выполнения ни браузера, ни web-сервера. В этом случае вместе с программой должен поставляться также и интерпретатор этого языка. Однако рассмотрение такого способа его применения выходит за рамки и этой книги, и большинства общедоступных руко-водств.
Практическое использование.
Вот несколько примеров использования PHP на реальных сайтах, существующих в российском Интернете.
Выборочная загрузка
1. Сайт www.harchikov.ru посвящен творчеству популярного певца-барда Александра Харчикова. На сайте должны были быть представлены вышедшие альбомы певца в количестве 15 штук и записи песен каждого альбома в MP3-формате. При создании сайта возникла необходимость обеспечить удобную навигацию. Общепринятый способ - ссылки на страницы с описанием каждого из альбомов и песнями из него - имел тот недостаток, что посетитель, желающий просмотреть не один альбом, а сразу несколько, был бы вынужден постоянно переходить со страницы на страницу, делая лишние усилия. Кроме того, в случае разрыва связи во время загрузки какого-либо файла посетитель, ушед-ший на другую страницу, был бы вынужден снова возвращаться на ту, с которой он этот файл загру-жать начал, тратя время на ее поиск. Недостаток другого варианта - размещения информации о всех альбомах на одной странице - ясен: размер этой страницы получился бы очень большим, а интерес-ная посетителю информация могла бы занимать лишь небольшую ее часть.
Поэтому было сделано так. На главной странице разместилась форма, а у каждого названия аль-бома - checkbox, внизу же страницы - кнопка перехода на список альбомов. Посетитель мог отметить заинтересовавшие его альбомы (рис.19.2), и после нажатия кнопки перехода PHP-сценарий выводил ему страницу с описаниями лишь тех альбомов, которые посетитель выбрал (рис.19.3).
Сделано это просто.
Все checkbox'ы заглавной страницы сайта имеют свои имена: <INPUT name=pan01 type=checkbox> и находятся в большой форме, параметром action которой является имя файла с программой на PHP, выводящей описания альбомов в соответствии с данными этой формы, а для передачи данных формы используется метод get (т.е. ее заголовок имеет вид <FORM action=albm.php method=get name=forma>). Последнее приводит к тому, что в адресе страницы с выведенными описаниями альбомов присутствуют переменные (см.рис.19.3), т.е. если посетитель занесет этот адрес в "Избранное", то при последующих возвращениях на сайт по этой ссылке (например, для дальнейшей загрузки песен выбранных альбомов) ему не придется вновь выбирать альбомы на заглавной страни-це, как это было бы в случае использования метода post, не помещающего имена переменных и их значения в строку адреса (что выглядит красивее). Кнопка, вызывающая переход на страницу, ука-занную в параметре action заголовка формы, должна иметь тип submit:
<INPUT type=submit value="Вывести оглавления отмеченных альбомов">
Загрузив заглавную страницу сайта www.harchikov.ru, можно легко изучить ее структуру.
В файле же albm.php помещена простая программа, выглядящая так:
<?php
if ($bar01==True) {include ("bar01.php"); }
if ($bar02==True) {include ("bar02.php"); }
... по строке на каждый альбом ...
?>
В файлах bar.01.php, bar02.php и т.д. находятся описания альбомов и ссылки на MP3-файлы песен. Если checkbox с соответствующим именем был отмечен на заглавной странице, то переменная его имени оказывается равной True - именно это и проверяется в сценарии.
Рис.19.4. Если вас заинтересовали лишь отдельные вопросы,
нет надобности загружать всю страницу.
Удивительно, что этот простейший прием в настоящее время практически не применяется на сай-тах Сети - используется традиционная схема размещения информации со множеством ссылок на от-дельные разделы. А ведь как удобно - например, на сайте Александра Харчикова можно выбрать альбомы, сгенерировать себе страницу со ссылками на песни из них и, заходя на нее, постепенно за-гружать песни или передать весь список ссылок на файлы в какую-нибудь из программ-"качалок". Или, скажем, на сайте фирмы "Экон-Профи" (www.econprofi.ru) точно так же сделан раздел "Вопросы и ответы" (рис.19.4), - отметив интересующие вопросы на странице раздела, можно получить подроб-ные консультации исключительно по выбранным темам. Полученная страница и загрузится быстрее, да и при ее распечатке лишней бумаги тратить не потребуется.
Данную схему, разумеется, можно доработать. Опыт показывает, что посетители чаще всего предпочитают просмотреть либо два-три выбранных раздела, либо все разделы сразу. В последнем случае им придется отмечать все checkbox'ы страницы, что занимает время и силы. Поэтому стоит поместить на страницу еще и кнопку вывода сразу всех разделов - "Просмотреть все". Ей можно на-значить гиперссылку с адресной строкой, содержащей все переменные в значении on, а можно не-много доработать код PHP на странице-обработчике запроса, попросту добавив во все условия про-верку значения еще одной, общей для всех условий переменной: if (($bar02==True) || ($all==True)) {... (напоминаю, что знак || означает "или"), и тогда гиперссылка может вести всего лишь на адрес albm.php?all=True. Можно для решения той же задачи поместить на страницу пару сценариев на JavaScript, выполняющих соответственно отметку всех checkbox'ов и, наоборот, их очистку (см. такой, к примеру, на странице www.harchikov.ru/cass.php). Так что простор для творчества имеется, и немалый.
Интернет-магазин
2. С помощью PHP можно легко сделать мини-Интернет-магазин - т.е. установить на сайт форму заказа, которая будет отправляться вам по электронной почте. При этом почтовая программа посети-теля использоваться не будет - ему даже необязательно вообще ее иметь.
К примеру, такой "виртуальный магазин" аудиокассет сделан на странице http://www.harchikov.ru/cass.php (рис.19.5). Посетитель может просмотреть описания кассет и отметить заинтересовавшие его предложения, поставив галочку в checkbox'ах. В низу страницы расположен раздел оформления заказа - сверившись с суммой (рассчитываемой небольшим сценарием на javascript и выводимой средствами Dynamic HTML в соответствующей строке формы), посетитель должен ввести свои контактные данные и отправить заказ, нажав соответствующую кнопку.
Страница "магазина" содержит форму с заголовком <FORM METHOD="post" ACTION="http://www.harchikov.ru/zakaz.php" NAME="mainform"> - то есть PHP-программа, обрабаты-вающая форму, находится в файле zakaz.php на сайте www.harchikov.ru (и именно на эту страницу произойдет переход после нажатия кнопки отправления заказа на исходной странице - "Отправить заказ"), а в адресной строке переменные отображаться не будут. Поскольку программы на PHP, что-бы быть исполненными, должны содержаться в какой-либо web-странице, то команда отправки почты содержится в файле zakaz.php. Вот как выглядит PHP-сценарий, формирующий письмо с заказом и отправляющий его администратору сайта:
<?php
$zak=" \n";
if ($RNS == True){$zak="$zak Русские не сдаются! \n"; }
if ($ZAR == True){$zak="$zak За Родину \n"; }
if ($PRP == True){$zak="$zak Песни пролетариата \n"; }
...
mail ("mail@harchikov.ru", "Заказ на кассеты", "С адреса $email с контактными данными $cont пришла заявка на приобретение кассет: $zak. Отправитель пользовал-ся браузером $HTTP_USER_AGENT, работал с IP-адреса $REMOTE_ADDR", "From: $email\nReply-To: $email\nContent-Type: text/plain; charset=windows-1251");
?>
Рис.19.5. Интернет-магазин - выбирай и заказывай. А строили его всего 5 минут.
Команда, собственно отправляющая письмо, стоит последней - это mail (описание читайте выше). Так как весьма желательно, чтобы получатель письма мог сразу начать выполнять заказ, не тратя время на расшифровку письма, то с помощью небольшого фрагмента кода на основе данных о зна-чениях переданных переменных создается строка с построчным перечнем полных названий заказы-ваемых товаров (чтобы не было проблем с восприятием интерпретатором кириллических символов в качестве имен переменных, имя каждого checkbox'а содержит только латинские буквы, например, PVS - <INPUT NAME=PVS TYPE=checkbox>) - и уже эта строка помещается в письмо. В результате тот, кто обрабатывает заказы, получит аккуратный список заказанных товаров и сведения о заказчике.
Имейте в виду, что для полноценного тестирования функции mail на локальном компьютере на нем должна быть установлена программа - почтовый сервер с соответствущими указаниями в на-стройках web-сервера, - иначе интерпретатор PHP будет выдавать сообщения об ошибке. Поэтому тестировать описанный здесь сценарий лучше сразу на сервере в Интернете.
Вот так, очень просто, вы можете сделать элементарную форму заказа чего-либо через Интернет с отправкой данных этих заказов вам по электронной почте. При использовании данного способа по-сетителю даже не нужно быть постоянно подключенным к Интернету во время оформления заказа - он спокойно может загрузить страницу с перечнем товаров, отключиться от Сети, выбрать нужные предложения и заполнить поля формы заказа, а затем, подключивши