СЕРГЕЙ ЯРЕМЧУК, фрилансер. Автор более 800 статей и шести книг. С «СА» с первого номера. Интересы: сетевые технологии, защита информации, свободные ОС
PHP
Я думаю, не будет большим секретом, что с помощью простого HTML-кода можно создать лишь статическую страничку. Но этого в современном быстроменяющемся мире уже недостаточно, необходимо быстро реагировать на изменения и выдавать новую информацию пользователю. К тому же возникает необходимость собрать информацию, например, с помощью анкет, автоматически ее обработать и выдать пользователю. С помощью HTML, увы, такие задачи решить невозможно. Какие только технологии не применяются сейчас для придания интерактивности веб-странице: DHTML, ASP, Perl, Java, ColdFusion. Есть в этом немаленьком списке и PHP. Не рассчитывал создатель данного языка Расмус Лердорф (Rasmus Lerdorf), что его язык приобретет такую большую популярность, а первоначально задумывал PHP исключительно для использования в своих личных целях, о чем свидетельствует даже расшифровка аббревиатуры – Personal Home Page (персональная домашняя страница).
Это была невзрачная CGI-оболочка, написанная на языке Perl. Позже, чтобы избавиться от значительных непроизводительных затрат, Perl-оболочка была полностью переписана на языке С. Затем все произошло так, как и с большинством популярных сейчас языков программирования (Perl, Python и т. д.): язык понравился, и программисты захотели использовать его для своих целей. Так в 1995 году появилась первая версия программы, содержавшая всего несколько простейших команд, позволявшая организовать на своей домашней странице счетчик, гостевую книгу и тому подобное. Сейчас PHP – мощный язык, имеющий в своем арсенале средства для работы с обычными файлами и базами данных (поддерживается большинство известных SQL-серверов), поддерживающий практически все протоколы, применяющиеся в сети Интернет (HTTP, FTP, SMTP, POP, IMAP), имеющий механизм регулярных выражений и к тому же прекрасно работающий с наиболее популярным веб-сервером Apache. Даже официальная расшифровка аббревиатуры изменилась на PHP – Hypertext Preprocessor, вот так в рекурсивном UNIX-стиле.
Что же представляет собой PHP? Это интерпретируемый язык, код которого встраивается прямо в обычный HTML-документ. Когда посетитель обращается к вашей страничке, то такая программа обрабатывается не браузером или сервером, а специальной программой-интерпретатором. Для того чтобы сервер знал, кто должен обрабатывать данный файл, его расширение изменяется на .php (.phtml, .php3 и другие, в зависимости от настроек сервера). Программа-интерпретатор, найдя инструкции, выполняет их и выдает полученный результат, который и видит пользователь, сам код остается недоступным. Это, кстати, неплохой способ скрыть комментарии, спрятать их в инструкциях PHP, которые пользователь не получает. При этом статическая часть документа, написанная на языке HTML, фактически является шаблоном, а изменяемая часть формируется при исполнении PHP-инструкций. Синтаксис языка очень напоминает C, а если быть точнее, то Perl. Те, кто программировал на этом языке, найдут много знакомого. Для вставки инструкций PHP в HTML-документ существует четыре варианта, приведу их все, так как на различных сайтах их часто можно встретить.
Первый и, наверное, наиболее предпочтительный, так как принят по умолчанию:
Второй вариант, сокращенный:
Для того чтобы ваш интерпретатор понимал его, установите значение параметра short_open_tag=On в файле php.ini, который находится в каталоге, куда установлен PHP.
Третий вариант предназначен для тех, кто привык работать с ASP:
<% PHP-инструкции %>
опция asp_tags=ON.
И четвертый – в духе JavaScript:
<script language="php"> PHP-инструкции </script>
Так как самый лучший способ учебы – это пример, то на них и будем потихоньку учиться.
1.<HTML>
2.<HEAD>
3.<TITLE>Hello</TITLE>
4.<META HTTP-EQUIV="pragma" CONTENT="nocache">
5.</HEAD>
6.<BODY>
7.<?php echo "Hello World";
8.?>
9.</BODY>
10.</HTML>
Примечание: нумерация приведена лишь для удобства, использовать ее в реальном документе не надо. Как видите, обычный HTML-документ. Четвертая строка необходима для указания браузеру, чтобы он не кешировал образовавшийся документ, иначе файлы будут выдаваться из кеша, а не запрашиваться у сервера, и вы можете не увидеть внесенные изменения. Вообще-то для этого можно использовать и встроенную функцию header, для HTTP/1.0 вызов будет таким:
header("Pragma: no-cache")
А строки 7, 8 просто выводят информацию. Результат можете посмотреть на рис. 1. Если необходимо использовать несколько операторов, то все они разделяются между собой «;», кроме последнего: после него ставить точку с запятой необязательно.

Рисунок 1
Теперь давайте узнаем всю информацию об установленном PHP. Создайте файл такого содержания:

Рисунок 2
Что, мало? А посмотрите, какой выход (рис. 2). Кстати, очень хороший способ узнать все о PHP на том сервере, где вы собираетесь размещать свои скрипты. Пойдем дальше. Как и положено полноценному языку программирования, в скриптах возможно использование переменных, например:
.
$message="Hello World";
echo $message
?>
И на выходе получим тот же результат. Это, как вы понимаете, очень удобно, ведь значение переменной можно изменять. Все переменные, как и в языке Perl, в PHP начинаются со знака доллара, после которого обязательно должен идти алфавитный символ (не цифра) или знак подчеркивания. Переменным можно присвоить до восьми различных типов данных:
- booleans (принимает значения false, true);
- integers (целые числа);
- floating point numbers (вещественные);
- string (строки);
- array (массивы любых типов данных);
- objects (объекты);
- resourses (ресурсы);
- NULL (никакое значение).
При этом, как и в Perl, значение типа переменной объявлять заранее необязательно, все это происходит автоматически. Чтобы проверить, введите такой пример:
.
$message="Hello Worl";
$message=4
echo $message
?>
Переменной можно присваивать и результат выполнения функции (рис. 3):
echo "Сегодня $d"
?>

Рисунок 3
И еще надо помнить, что регистр имеет значение, т.е. $var и $Var – это две различные переменные, будьте внимательны при наборе. Теперь кратко о типах данных.
Integer может принимать следующие значения:
- $a = 1234 – обычное число;
- $a = – 1234 – отрицательное;
- $a = 0123 – восьмеричное;
- $a = 0x123 – шестнадцатеричное.
Floating point numbers можно записать как в виде $a = 1.234, так и в «научной» нотации $a = 1.2e3. Строка – это данные, помещенные между двумя знаками «». О переменных, пожалуй, пока все, оставшиеся типы рассмотрим по ходу. Теперь попробуем что-нибудь посложнее. Создайте в папке сервера файл hello.inc такого содержания:
<?php
function printtitle() # объявляем функцию
{
print "<title>Hello from hello.inc</title>\n";
}
function printnumbers($start)
{
print "<H2>"; // выводим начальный тег
for($temp=0; $temp < 5; $temp++)
{ /* теперь выведем значение переменной */
print $start++ . "<br>\n";
}
print "</H2>"; // выводим конечный тег
}
?>
Теперь создайте файл hello1.php такого содержания:
<HTML>
<?php include("./hello.inc") ?>
<HEAD>
<?php printtitle() ?>
<META HTTP-EQUIV="pragma" CONTENT="nocache">
</HEAD>
<BODY>
Начинаем <p>
<?php
printnumbers(7);
?>
<p> Заканчиваем <p>
</BODY>
</HTML>
Теперь запустите браузер и наберите http://localhost/hello1.php. Результат посмотрите на рис. 4.

Рисунок 4
Давайте теперь разберем, что получилось. Начнем с файла hello.inc. Сначала обратите внимание на появившиеся комментарии: они при выполнении скрипта пропускаются и служат для того, чтобы потом можно было разобраться в программе. Дополнительно комментариями можно временно отключать ту или иную часть кода при отладке. Как вы видите, комментарии можно обозначать тремя различными способами. Знаки // и # действуют только до конца текущей строки, если есть необходимость в более длинном комментарии, то воспользуйтесь конструкцией в стиле С /* текст комментария */.
Следующий шаг – это объявление пользовательской функции. Первая функция printtitle() выдает с помощью функции print заголовок, который и выведет браузер. Посмотрите, здесь использована так называемая управляющая последовательность (escaped characters): символ , используемый для перехода на новую строку, в их число входит также символ – знак горизонтальной табуляции.
Функция printnumbers, как видите, уже принимает аргументы, мы просто увеличиваем значение переменной $start после каждого вызова функции print. Здесь используется оператор приращения, пришедший из языка С. Если данный оператор стоит, как в нашем случае, после переменной, то ее значение изменится уже после того, как оператор вернет значение, а если данный оператор поставить перед переменной (++$var), то ее значение изменится до того, как возвращается ее значение. Возможно также применение оператора уменьшения. Для того чтобы соединить две строки, используется точка, а не знак плюс. В конструкции print $start++ . «
» мы это и использовали. Со строками связан еще один интересный момент – подстановка переменных непосредственно в строку. Для этого строку необходимо заключить в двойные кавычки. Попробуйте такой пример:
<?php
$name="Сергей";
echo "Добрый день $name\n";
echo 'Добрый день $name\n'
?>

Рисунок 5
Результат посмотрите на рис. 5. Как видите, в первой строке, заключенной в двойные кавычки, выведено значение переменной $name, а во второй строке с одинарными кавычками такой подстановки не произошло. Поэтому если вы хотите отобразить такие символы, как «$», «/», «“», «.» и некоторые другие, то они должны обязательно экранироваться обратным слэшем. А вот с помощью обратных кавычек можно выполнять команды интерпретатора.
<?php
echo `pwd`
?>

Рисунок 6
И браузер выведет название каталога, из которого запущен скрипт (рис. 6). Это, с одной стороны, придает гибкость, позволяя использовать мощный потенциал, заложенный в систему, а с другой – необходимость заботиться о безопасности, ведь злоумышленник может исполнить и такой скрипт:
<?php
$cat=`cat /etc/passwd`;
echo "<pre>$cat</pre>"
?>

Рисунок 7
И браузер выведет содержимое файла /etc/passwd (рис. 7). Дальше мы столкнулись с оператором цикла. Оператор for используется для итерационного выполнения команд, находящихся в теле цикла. В данном случае, пока переменная $temp не достигнет значения, меньшего или равного пяти, будет печататься значение переменной $start.
При этом возможны, например, и такие конструкции:
for ($i = 1; $i <= 10; print $start++ , $i++) ;
Все, с файлом hello.inc разобрались, давайте перейдем теперь к файлу hello1.php. Оператор include(“./hello.inc”) подключает внешний файл, в котором PHP будет искать информацию, если не найдет ее в основном файле. Использование одного файла позволяет избежать повторения одной и той же информации во всех файлах проекта. Да и в случае изменения какой-либо функции необходимо будет внести изменения только в один файл, а не в сотню. Обратите еще внимание на UNIX-стиль указания текущего каталога. Дальше вызываем на исполнение функцию printtitle(), которая выводит заголовок файла, а функция printnumbers(7), как видите, вызывается с аргументом, который будет передан в тело функции.
Теперь немного информации для тех, кто хочет начать изучать новый для себя язык программирования, но не знает, с чего начать. Для того чтобы полноценно работать с PHP, вам понадобится как минимум три вещи. Первая – собственно интерпретатор, здесь отправная точка – официальный сайт проекта http://www.php.net, где вы дополнительно найдете документацию (на английском) http://www.php.net/manual/en. Еще советую заглянуть на сайт http://www.phpbuilder.com, где также полно документации (опять же на английском), а вот по адресу http://pear.php.net расположен аналог Perl CPAN, называемый PEAR (PHP Extension and Application Repository), где можно найти большое количество готовых скриптов. Для тех, кто программирует под Windows, еще один полезный ресурс: http://www.php4win.com.
Но для полноценной работы необходимо наличие веб-сервера, здесь альтернативы очень удобному бесплатному и наиболее популярному веб-серверу Apache, который есть как для Windows, так и для UNIX-подобных операционных систем, нет. Найти индейца можно по адресу http://www.apache.org или его «русифицированный» вариант, который можно взять с сайта http://apache.lexa.ru.
И третий компонент, который может вам понадобиться – это какой-нибудь SQL-сервер. Здесь выбор большой, я лично использую MySQL http://www.mysql.com. Из редакторов под Windows (кроме блокнота) могу посоветовать CuteHTML или Arisesoft Winsyntax (http://www.winsyntax.com/files/site2/aswsyn20.zip).
http://quanta.sourceforge.net/quantadoc. А HTML-редактор bluefish имеет заготовки практически для всех функций PHP.
Пока все. До следующего раза. Успехов.