Путешествуя просторами Глобальной сети, вы, наверное, не раз встречали всевозможные форумы и опросники. Видели разнообразные графики и счетчики систем сбора и обработки статистической информации, которые изменяли свой вид всякий раз, когда вы посещали такой сайт снова и снова. Возможно, вы заполняли различные формы, в которых уже до вас были введены ваше имя, электронный адрес и прочая "конфиденциальная" информация. Если это так, то наверняка вам приходилось сталкиваться с файлами, которые имели расширение *.php3, вместо привычных *.htm или *.html. Что за этим всем скрывается, мы и попробуем рассказать в этой статье…
РНР (читается как пи-эйч-пи) появился на свет осенью 1994 года по воле Расмуса Лердорфа (Rasmus Lerdorf). Немного ранее имели место первые версии этого скрипт-языка, которые сам автор использовал исключительно в своих личных целях. РНР начал свою жизнь как невзрачная CGI-оболочка, написанная на Perl.
Небольшое отступление: СGI (Common Gateway Interface) - общий шлюзовой интерфейс - является стандартом, который предназначен для создания серверных приложений HTTP. Такое приложение, которое называют шлюзом или CGI-программой, запускается www-сервером в реальном времени. Сервер передает запросы пользователя CGI-программе, которая их обрабатывает и возвращает результат своей работы на экран пользователя. Таким образом, Интернет-серфер получает динамическую информацию, которая может изменяться в результате влияния различных факторов. Сам шлюз может быть написан на C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script и других подобных языках. Но в случае с РНР, для написания его в первоначальном варианте был выбран язык Perl.
Вот как об этом вспоминает сам автор: "Я написал это в течение полудня в промежутке между деловыми встречами. Тогда я нуждался в быстром инструменте, чтобы иметь представление о тех людях, которые читали мое резюме, размещенное в Сети. Даже не предполагалось, что оболочка будет использоваться кем-то кроме меня. Сервер, на котором располагалось мое резюме, был постоянно перегружен. Я переписал Perl-оболочку на C, чтобы избавиться от значительных непроизводительных затрат… Люди, которые использовали тот же сервер, натолкнулись на мою оболочку и попросили ее для использования у себя".
Так, в начале 1995 года появилась первая версия продукта, которая стала доступной широкому кругу пользователей и содержала дистрибутив с документацией, список рассылки и FAQ. Имя этого первого пакета было Personal Home Page Tools. На тот момент РНР обладал достаточно скромными возможностями. Он имел простейший анализатор кода, который понимал несколько специальных команд, а также разные утилиты для использования на домашней странице, такие как гостевая книга, счетчик и тому подобное.
Ближе к средине 1995 пакет основательно перерабатывается, был добавлен Form Interpreter (FI), для упрощения обработки данных, вводимых с помощью форм. Также появилась поддержка mSQL, позволившая работать с базами данных. В таком виде появилась вторая версия продукта, которая носила название PHP/FI Version 2. После этого РНР начал стремительно развиваться. Люди начали писать собственные библиотеки, расширяющие функциональность языка.
По скромным подсчетам NetCraft, в конце 1999 года PHP использовался уже на более чем 1000000 сайтов во всем мире. В июне 2000 года эта цифра перевалила за 2,5 миллиона.
Так что же это такое? Итак, на сегодняшний день РНР, несмотря на свое скромное название (Personal Home Page - персональная домашняя страница), - это мощный кроссплатформенный набор средств, который располагается на сервере и предназначается для обработки кода, встраиваемого в html-документы. Благодаря этому, появляется возможность создавать динамические Web-страницы. То есть вы создаете их как обычно, используя язык HTML и вставляя в документ, по мере необходимости, РНР-команды. Файлы, созданные таким образом, хранятся на сервере. Когда посетитель обращается к вашей страничке, РНР обрабатывает встроенные в нее команды и выдает результат браузеру пользователя - точно так же, как это делает CGI-программа, написанная на С или Perl. Только в отличие от последней, РНР имеет ряд преимуществ:
- создание и отладка скриптов PHP значительно проще, чем отладка и создание скриптов на других языках.
- так как РНР-команды просто вставляются в текст html-документа, отпадает необходимость в различных IDE (интегрированная среда разработки);
- для решения разных специфических задач не нужно писать и отлаживать многочисленные маленькие CGI-программы, что сводит к минимуму время доступа к вашим страницам, а также продолжительность разработки страниц и сайта в целом.
Вместе с тем, РНР обладает огромным набором функций и большой гибкостью, которые могут быть значительно расширены с помощью дополнительных внешних библиотек. Вы можете управлять доступом к вашим страницам, создавать и обрабатывать базы данных любой сложности, генерировать изображения или PDF-документы и тому подобное. Но обо всем по порядку.
Заглянем внутрь. По своему синтаксису РНР является С-подобным языком. Поэтому программисту, пишущему на С, будет очень легко освоить этот скрипт-язык и использовать его максимально эффективно в своих целях. Но даже если С вам не знаком, то… настало время с ним познакомиться, тем более, что РНР прекрасно для этого подходит. Все достаточно просто, и я постараюсь вам это показать.
Для начала, чтобы сервер знал, в каком из файлов используются РНР-команды и, следовательно, мог передать такую страничку для дальнейшей обработки, необходимо изменить расширение файла с *.html на *.php3. Поэтому, когда вы видите файлы с таким расширением, можно с почти полной уверенностью утверждать, что при их создании использовался РНР.
Каждая команда РНР обычно начинается с тэга <?php и заканчивается ?>. Если вы используете несколько команд подряд, они могут быть объединены внутри одной пары тэгов - в этом случае каждую команду необходимо отделять друг от друга символом ;. В любом месте РНР-скрипта можно размещать комментарии. Для начала комментария используется символы /*, а для его завершения - */. Если комментарий небольшой, удобней использовать символы // - тогда все, что следует за ними до конца строки, будет игнорироваться, подобно лишним символам пробела, табуляции и новой строки.
РНР позволяет использовать переменные - при этом их не нужно описывать так, как это делается в Visual Basic или Pascal. Вы просто вводите необходимую переменную там, где вам нужно и тогда, когда вам это нужно. Имена переменных начинаются с символа $.
Переменные могут быть трех типов: целые, с плавающей запятой и символьные строки. Хотя разделение на типы скорее
<?php
$a = 7;
$b = 9.5;
$c =
"Hello";
?>
Здесь переменной а присваивается значение 7, и она приобретает тип целочисленной. Переменная b обретает вещественный тип и становится равной 9,5. Строка Hello присваивается переменной с, в результате чего она становится строковой.
Для отображения переменных или результатов работы скрипта используется команда echo. Вот небольшой пример рабочей страницы, для того, что бы можно было оценить, как просто включить PHP-скрипт в обычный html-документ:
<html>
<head>
<title>Пример</title>
</head>
<body>
<?php
$d = date(d.m.Y);
echo "Последние
обновления: $d "; ?>
</body>
</html>
В результате загрузки такой страницы, РНР обработает все команды, которые находятся между специальными тэгами, и вы увидите, в данном случае, строку вроде Последние обновления: 2.08.2000. Браузер получает чистый HTML-код и если просмотреть его, вы не найдете там никаких следов пребывания РНР. Таким образом, вы создадите "вечно обновленную" страницу J.
Встроенная функция date() способна выводить текущие время и/или дату - в любом необходимом для вас виде.
С помощью PHP очень просто обрабатывать данные, полученные из форм, так как для каждого поля ввода в вашей форме автоматически создается переменная. Предположим, например, что у вас есть форма:
<form
action="thanx.php3" method=post>
<input type="text"
name="name">
< input type="text" name="email">
<
input type="submit">
</form>
Тогда в файле thanx.php3 можно написать что-нибудь вроде:
<?php
echo "Спасибо вам, $name, за регистрацию. Мы только что отправили на
$email 10Mb рекламных проспектов. Заходите к нам
еще.";
?>
Тем самым вы порадуете посетителей своей странички такой оперативной работой, и они наверняка захотят вернуться к вам еще разок.
Письмо можно действительно послать, и это делается одной строкой. Если вы добавите в тот же thanx.php3 нижеследующее:
<?php
mail($email, "Тема сообщения",
"Простите, проспекты уже закончились");
?>
Письмо уйдет на адрес, который пользователь еще минуту назад неосмотрительно вводил в вашу форму.
РНР поддерживает HTTP-cookies. Cookies - это механизм для сохранения данных в удаленном браузере. Таким образом можно отслеживать или идентифицировать пользователя. Для того, чтобы сохранить переменную на компьютере посетителя вашей странички, используется функция SetCookie(). Любое значение cookies, сохраненное таким образом, автоматически превращается в переменную, так же как и в случае с формами. Например:
<?php
SetCookie("TrojanHorse","Я вас где-то видел ");
echo
$TrojanHorse;
?>
На экране появится строка: Я вас где-то видел. Все достаточно просто, сохранять можно любые переменные, а затем их использовать. Именно поэтому в формах, которые вы хотя бы раз заполняли, при их последующих загрузках вы можете увидеть ваши имя, электронный адрес и прочую подобную информацию в соответствующих полях.
В РНР присутствует достаточно большой набор функций для работы с файлами. Причем можно работать как с локальными файлами, так и с теми, что расположены на удаленных серверах. Процедура записи/чтения осуществляется очень просто.
<?PHP
$fp =
fopen("counter.txt","r+");
$c = fgets($fp, 10);
$c = c +
1;
rewind($fp);
fputs($fp,$c);
fclose($fp);
echo
$c;
?>
Этот пример демонстрирует принцип создания на РНР, простейшего счетчика посещений вашей страницы. Функция fopen() открывает файл counter.txt для чтения и записи. В переменную с с помощью функции fgets() считывается строка длиной 10 байт. Затем значение счетчика увеличиваем на единицу. Здесь хорошо видно, как переменная с, которая вначале имела строковый тип, становится целочисленной: $c = c + 1. Функция rewind($fp) перемещает файловый указатель на начало файла. Новое значение счетчика записывается в файл fputs($fp,$c), после чего он закрывается fclose($fp). В том месте страницы, где будет расположен этот скрипт, всегда можно будет видеть, сколько раз эта страница посещалась.
Интересные возможности открываются при использовании HTTP-заголовков. Частным случаем их использования может служить такой пример. Допустим, вы имеете каталог ссылок и хотите знать, какие из них пользуются наибольшей популярностью. В этом случае можно использовать функцию header(). Например:
<?PHPheader("Location: http://www.php.net/"); ?>
В данном случае пользователь будет перенаправлен на сайт РНР. При этом можно увеличить значение счетчика, которое-то вам и расскажет, что именно интересует ваших посетителей. Заголовки (как, впрочем, и cookies) необходимо использовать до вывода данных командой echo или ей подобными функциями - иначе ничего не получится.
Чтобы больше узнать о ваших посетителях (а именно для этого, как вы теперь знаете, в начале и создавался этот язык), можно использовать предопределенные переменные, доступ к которым предоставляет РНР. Например, с помощью переменной REMOTE_ADDR вы узнаете IP-адрес, с которого пользователь просматривает вашу страничку. Переменная HTTP_USER_AGENT расскажет вам о том, какие браузеры и операционные системы используют ваши посетители. Существует еще множество других переменных, которые можно использовать для изучения аудитории посетителей вашего сайта или страницы.
В одной статье трудно рассказать обо всех возможностях такого мощного и в то же время доступного скрипт-языка, как РНР. Тем более невозможно описать все реально используемые функции и способы их применения. И если вы задумываетесь о том, как разнообразить ваши html-творения, или, может быть, вас мучает сомнение - быть или не быть РНР в вашем веб-арсенале - я думаю, вам будет легче сделать свой выбор после ознакомления с этой статьей.