КАРТА САЙТА
  ПОИСК
полнотекстовый поиск
ФОРУМ ВИДЕО
ИГРЫ: НОВЫЕ    0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z А-В Г-З И-М Н-П Р-Я

СОЗДАЁМ САЙТПАНЕЛЬ ИНСТРУМЕНТОВ

Автор материала:
Борис Чертов
Опубликовано в журнале
«Лучшие компьютерные игры»
№9 (70) сентябрь 2007
вид для печати

Языки сценариев для веб-программирования
Мини-учебник по PHP

Дайте мне хороший сценарий, и я сверну горы.

Люк Бессон

Зачем создателю сайта нужны языки серверных сценариев?

В статье, посвященной базам данных из прошлого номера нашего журнала (положите ее рядом – она сейчас еще пригодится) вы уже читали о различиях между статическими и динамическими сайтами (их по-другому называют еще пассивными и активными). Главные отличия динамического сайта в том, что

  • во-первых, содержимое его страниц формируется «на лету», на основе данных, хранящихся в базе данных, а не заготовлено заранее (пример — лента новостей);
  • во-вторых, есть обратная связь с посетителями – сайт активно взаимодействует с ними через формы, содержащие поля для ввода данных (пример — гостевая книга, или возможность комментировать материалы и читать эти комментарии);
  • и в-третьих, у него, как правило, разделены фронтальная часть (для взаимодействия с пользователями) и служебная (для взаимодействия с администраторами сайта, наполняющими его содержимым).

Добавление страницы в статический сайт – работа достаточно нудная: надо загрузить на сервер новый материал (как правило, по протоколу FTP) и прописать на него ссылки из нескольких мест – иначе про новую статью никто никогда не узнает. Служебная часть сильно облегчает эту задачу: ссылки будут сформированы автоматически.

Обычно люди приходят к необходимости создания динамических сайтов, когда разросшийся объем хранящейся информации или желание часто ее обновлять требуют использования того, что на программистском жаргоне называют «движком» сайта, а официально — CMS (content management system), то есть системой управления содержимым. Создание такого движка невозможно без привлечения сценариев, выполняемых на стороне веб-сервера. Именно эти сценарии как помещают содержимое на сайт, так и формируют внешний вид страниц «на лету».

Как работают сценарии? Языки сценариев

Что происходит, когда вы открываете в браузере (Internet Explorer, Opera, FireFox или любой другой) страницу какого-нибудь сайта?

  • браузер, он же веб-клиент, запрашивает страницу, обращаясь к веб-серверу (чаще всего это Apache, реже — IIS).
  • если веб-сервер обнаруживает на запрошенной странице обращения к сценариям, то обращается к их интерпретаторам, которые выполняют сценарии и формируют на их основе или всю страницу, или отдельные ее фрагменты.
  • И, наконец, веб-сервер отсылает сформированную страницу на клиентскую сторону, то есть в окно браузера посетителя сайта.

Собственно, динамические сайты как раз и отличаются от статических  тем, что без второго этапа не обойтись. Существенная часть различий между языками сценариев определяются именно тем, как они выполняют этот этап. Ну и, разумеется, синтаксис тоже играет роль.

Наиболее распространенные языки сценариев со свободно распространяемыми кодами для веб-сервера Apache - PHP, Perl и Python. Все они достаточно гибкие и  допускают подключение новых модулей, библиотек и т. п. Все они выполняются на стороне сервера. Это и обеспечивает быстродействие (из-за возможности использовать ресурсы мощных серверов), и гарантирует исполнение (пользователь не может отключить выполнение программы), и  не позволяет посетителям сайта видеть исходные коды сценариев.

Исключительная же популярность языка PHP связана с тем, что, в отличие, скажем, от Perl, он позволяет внедрять текст сценария непосредственно в HTML-текст страницы и выполнять сценарий в контексте основного процесса обработки HTML.


История создания PHP
20KB
Самая лучшая книга по PHP на русском языке.

В 1994 году датский программист (ныне живущий в Канаде) Расмус Лердорф (Rasmus Lerdorf) написал набор скриптов для обработки шаблонов HTML-документов. Вначале этот инструментарий был написан им на Perl, но когда возможностей этого языка по функциональности и быстроте перестало хватать, Лердорф создал на языке C собственный интерпретатор шаблонов и назвал его PHP/FI (Personal Home Page / Forms Interpreter — «Личная домашняя страница / Интерпретатор форм»). Поскольку коды нового инструмента были открыты и свободно распространяемы, это привело к их быстрому расширению и продвижению силами энтузиастов из различных стран. В 1997 году вторую версию интерпретатора PHP/FI 2 использовали около 50 тысяч (около 1% на тот момент) интернет-сайтов мира.

Настоящая же революция в PHP произошла в 1998 году, когда два израильских программиста Энди Гутманс (Andi Gutmans) и Зив Сураски (Zeev Suraski) из израильского института Технион переписали код с нуля, посчитав существовавшую на то время версию не пригодной для разработки приложений электронной коммерции, над которыми они тогда работали. Так появился PHP 3 — почти тот PHP, который мы знаем сегодня: язык с модульной структурой, позволяющей расширять возможности ядра независимо работающими программистами со всего света. В третьей версии появилась поддержка огромного множества платформ, веб-серверов, интернет-протоколов и т.п. Кроме того, в языке сильно изменился синтаксис. Он стал более удобным, более мощным и, что особенно важно, объектно-ориентированным.

Это интересно: появление настолько переработанной версии привело к новой расшифровке аббревиатуры языка. Новая, ставшая теперь уже официальной расшифровка -  «PHP: Hypertext Preprocessor» - является рекурсивной, то есть ссылающейся на саму себя. Есть, впрочем, и ряд неофициальных расшифровок. Так, из-за легкости изучения и не всегда высокой квалификации разработчиков аббревиатуру иногда расшифровывают иногда как «People Have Problems».

Победное шествие PHP 3 по всемирной паутине было впечатляющим: уже к концу 1998 года он использовался в 10% веб-сайтов интернета. С тех пор возможности PHP и его распространенность выросли многократно. На веб-серверах сегодня иcпользуются в основном PHP 4 (его поддержка прекращена совсем недавно) и PHP 5, а на стадии тестирования находится PHP 6.

Немного практики

Как PHP-сценарии встраиваются в HTML-страницу?

Существует несколько синтаксически различных конструкций для внедрения PHP-кода в HTML-текст страницы. Самый ходовой из них:


<?php

...

?>


Все, что будет написано вместо троеточия между этими окаймляющими тегами, и есть PHP-сценарий.

Этот сценарий выполнится целиком на стороне веб-сервера. В результате выполнения будет создан фрагмент HTML-текста, который и будет показан пользователю. Даже любопытный пользователь, открыв у себя в браузере исходный код HTML-страницы, эти теги, в отличие от кода на JavaScript, не увидит. Так, в этом простейшем примере


<HTML>

  <BODY>

<?php

echo ("<P>Журнал <B>&laquo;Лучшие компьютерные игры&raquo;</B></P>");

?>

  </BODY>

</HTML>


вместо блока PHP-сценария в ходе серверной обработки возникнет HTML-строка.

На страницу эту строку выведет встроенная функция echo, синтаксис которой достаточно понятен. Именно с такой строкой страница вернется в браузер к читателю сайта. Увидит же он ее в виде отдельного абзаца с выделенным жирным стилем названием журнала (сработают вставленные в строку HTML-теги и кавычки-ёлочки):

Журнал «Лучшие компьютерные игры»

Хотя PHP-сценарии и можно встраивать в HTML-страницы, они могут существовать и автономно, в отдельных файлах. Это очень удобно для создания больших сайтов – общий код хранится в одном экземпляре. Что самое важное – при этом и ошибки исправлять приходится только в одном месте.

Комментарии

Проще всего показать, как используются комментарии, нарастив ими предыдущий пример.


<?php

# Это комментарий в одну строку, оформленный в стиле UNIX

echo ("<P>Журнал <B>&laquo;Лучшие компьютерные игры&raquo;</B></P>"); // комментарий до конца строки (стиль С)

/*

Многострочный комментарий в стиле С.

В нем можно поместить не ограниченный по размеру текст

*/

?>


Эти комментарии будут игнорироваться при синтаксическом анализе PHP-кода и, в отличие от HTML-комментариев, не покажутся конечным пользователям при просмотре исходного текста страницы. Они нужны только разработчикам, чтобы документировать собственные действия.

Переменные и константы

Переменные в PHP, как и в любом другом языке программирования, служат для именованного хранения данных. Для тех, кому никогда раньше не приходилось программировать, проще всего представить себе переменную в виде некой коробочки с именем, из которой мы можем извлекать хранимое значение, менять его и класть на хранение обратно. Переменные в PHP делятся на скалярные (хранящие одно значение) и массивы (хранящие множество значений).

Имена переменных в PHP всегда начинаются со знака доллара ($), за которым следуют буквенно-цифровые символы и знаки подчеркивания. Первый символ цифрой быть не может. Следует помнить, что имена переменных, в отличие от ключевых слов языка, чувствительны к регистру!

Скалярные переменные

Основные типы скалярных переменных в PHP - это логические величины (принимающие значения «истина» или «ложь»), целые и вещественные числа, а также строки. Явно указывать, что же именно хранится в переменной, не обязательно, хотя и можно. Тип устанавливается во время присваивания переменной первого значения, но в ходе выполнения программы может много раз измениться. Вот так можно объявить переменные и присвоить им начальные значения:


$qty = 13.5;

$sql = "SELECT * FROM goods";


Массивы

Массив — это набор нумерованных значений. Нумерация всегда начинается с нуля. Существуют различные способы инициализации массивов. Вот один из них:


$languages = array ("PHP", "Perl", "Python");


Здесь создан массив из трех строковых элементов. Если мы выполним команду echo($languages[2]), то в браузер будет выведен элемент «Python» (нумерация ведь начинается с 0!).

Этот же массив можно было создать и иначе:


$languages[0] = "PHP";

$languages[1] = "Perl";

$languages[2] = "Python";


Или даже так:


$languages[] = "PHP";

$languages[] = "Perl";

$languages[] = "Python";


Нумерация при этом будет произведена автоматически, но строго последовательно.

Константы

Константы используются для задания постоянных величин. Они объявляются в РНР при помощи функции define():


<?php

define(MIN_NUM, 1);

define(MAX_NUM, 100);

?>


Здесь объявлены две целочисленные константы: MIN_NUM и MAX_NUM. Основное отличие их от переменных в том, что значения им не присваиваются в ходе выполнения программы, а подменяют их символические обозначения еще до начала ее выполнения.

Простые операторы

Константы и переменные — это лишь данные, которые сами по себе не представляли бы интерес, если бы не существовало способов ими манипулировать. Для совершения действий и служат операторы. Существуют различные типы операторов: присваивания, арифметические, логические, условные и т.д. С оператором присваивания мы уже сталкивались, когда рассматривали инициализацию переменных. Арифметические операторы мало чем отличаются от того, что есть в других языках:


$b = 7;

$a = $b - 2;

$a = $a + 1;


При работе со строками важную роль играет оператор конкатенации, сшивающий несколько строк в одну. Роль плюса в арифметических операторах здесь играет точка «.». Так, в следующем примере три слова, хранящиеся в переменных $s1, $s2, $s3, будут сшиты в одну фразу, а между ними будут вставлены пробелы.


<?php

$s1 = "Лучшие";     

$s2 = "компьютерные";

$s3 = "игры";  

echo ($s1 . " " . $s2 . " " . $s3);

// в браузере появится строка "Лучшие компьютерные игры"

?>


Управляющие операторы

Любая программа, на каком бы языке она ни была написана, выполняет последовательность операторов. В ходе выполнения программы приходится менять эту последовательность в зависимости от условий или выполнять одни и те же действия с разными данными. Для этого и нужны управляющие операторы.

Условный оператор if...elseif...else

Рассмотрим условный оператор на примере, проверяющем (если уж база посвящена товарам) цену, которая для них указана.


if ($price < 20) {

   echo ("Очень дешевый товар");

} elseif ($price > 100) {

   echo ("Дорогой товар");

} else {

   echo ("Товар по разумной цене");

}


Разумеется, условий elseif мы можем написать сколько угодно.

Операторы цикла while и for

В отличие от условного оператора if, который проверяет каждое условие один раз и действует в зависимости от истинности или ложности результата, оператор while продолжает выполняться, пока его условие остается истинным. Итак, в приведенном ниже примере переменная $s накапливает в себе сумму всех натуральных чисел от 1 до 100:


$s = 0;

$i = 1;

while ($i style="color:#990000"><= 100) {

   $s = $s+$i;

   $i++;

}

echo ("Сумма = $s");


Начальное значение суммы $s устанавливается в 0, а натуральное число $i принимается за 1. В ходе циклического выполнения сумма увеличивается на текущее натуральное число, после чего само это число увеличивается на 1 (оператор: $i++). Так продолжается до тех пор, пока $i не превысит 100 и, как следствие, оператор цикла не прекратит выполнение заложенных в него действий из-за нарушения своего условия.

Для выполнения той же самой задачи можно было использовать и цикл for. Запись оператора выглядит при этом проще:


$s = 0;

for ($i=1; $i <= 100; $i++) {

   $s = $s+$i;

}

echo ("Сумма = $s");


Три выражения в цикле for, разделенные точкой с запятой, несут следующую смысловую нагрузку. Первое из них — инициализирующее. Второе определяет условие выхода из цикла (аналогично тому, как это делается в while). Третье условие определяет способ наращивания переменной цикла $i (в конце каждого набора действий она увеличивается на 1).

Функции

Функция — это законченный, самодостаточный и именованный участок кода, предназначенный к вызову из сценария или других функций. Если переменные — это кирпичики кода, операторы — небольшие его блоки, то процедуры — это уже оформленные строительные конструкции. На вход функции можно, но не обязательно, подать входные параметры, на выходе получается некий результат. Если сравнивать язык программирования с русским языком, то переменные, константы и ключевые слова играют в нем роль слов, операторы — знаков препинания, а функции — роль готовых текстов.

Строится простая собственная функция с двумя входными параметрами примерно так:


function some_func($argument1, $argument2) {

// тут расположен собственно текст функции

}


Программист может как писать собственные функции, так и использовать любую из готовых функций языка. Одну из них (echo) мы уже не один раз использовали в этой статье. Приведу еще несколько примеров часто используемых функций:

  • date() — возвращает текущие дату и время сервера;
  • substr(строка, стартовая_позиция, [длина]) — возвращает часть строки с указанной начальной позиции и (не обязательно) указанной длины;
  • strlen(строка) — возвращает количество символов в строке;
  • die(сообщение) — выводит сообщение, после чего прерывает выполнение сценария;
  • header() — выводит HEADER (заголовок) HTML-страницы;
  • mail("адрес","тема","сообщение","от кого") — отправляет письмо с сервера (если на сервере все настроено);
  • include(имя_файла) — вставляет в текст одного сценария фрагмент текста, хранящийся в отдельном файле.

Как осуществляется обратная связь с сайтом через формы?

Именно возможность создания интерактивных страниц делает применение скриптовых языков столь привлекательным. Приведу пример простой HTML-страницы с формой, созданной для того, чтобы пользователь мог передать какую-то информацию обратно на сайт.


<HTML>

  <HEAD>

    <TITLE>Пример простой формы</TITLE>

  </HEAD>

  <BODY>

    <FORM action="post_form.php" method="post">

      <P>Ваше имя</P>

      <P><input type="text" name="user"></input></P>

      <P>Ваше сообщение</P>

      <P><textarea name="message" rows="10" cols="60"></textarea></P>

      <P><input type="submit" value="Принять"></input></P>

    </FORM>

  </BODY>

</HTML>


Все, что находится в этом HTML-коде между тегами style="color:#990000"><FORM> и style="color:#990000"></FORM>, относится к нашей форме. Посетитель сайта сможет через страницу формы в браузере ввести свое имя через однострочное поле «name» и сообщение - через многострочное поле «message». Обработка этих данных начнется после того, как пользователь нажмет на специальный элемент формы, имеющий тип «submit». В нашем случае это кнопка с надписью «Принять». Как именно форма будет обрабатываться, мы указали в атрибутах тега style="color:#990000"><FORM>. Один из этих атрибутов (action) указывает, какой именно PHP-сценарий следует запустить, другой атрибут (method) указывает, каким способом (post или get) будет осуществляться передача данных от браузера к веб-серверу. В данном случае нами выбран метод «post» и предложен сценарий, хранящийся в файле «post_form.php». Путь к файлу здесь явно не указан - предполагается, что мы для простоты выложили его в той же директории, что и HTML-страницу формы.

Теперь приведем текст скрипта из файла «post_form.php», который будет на стороне сервера обрабатывать данные, полученные от формы, заполненной на клиентской стороне (то есть в браузере):


<HTML>

  <HEAD>

    <TITLE>Обработка формы — файл post_form.php</TITLE>

  </HEAD>

  <BODY>

<?php

echo ("Приветствуем Вас, уважаемый <b>".$_POST['user']. "!</b><br>");

echo ("Вот что Вы нам написали: <br><i>".$_POST['message']. "</i>");

?>

  </BODY>

</HTML>


Итак, что же происходит при обработке формы? Для получения информации от пользователя (поля «user» и «message» формы) мы используем зарезервированный в PHP для передачи параметров по post-методу ассоциативный массив глобальных переменных $_POST. Глобальными называются переменные, которые видимы во всех частях сценария, а не только в той процедуре, где они используются. Ассоциативность массива выражается в том, что мы обращаемся к его элементам не по их порядковым номерам, а по именам ключей («user» и «message»), ассоциированных с этими элементами. Дальше мы просто вставляем полученные от формы данные в HTML-страницу, используя конкатенацию строк.

Если, например, пользователь в поле «user» напишет «отец Федор», а в поле сообщения — «Киса и Ося здесь были», то наш PHP-скрипт сформирует на стороне веб-сервера такой HTML-код:


Приветствуем Вас, уважаемый <b>отец Федор!</b><br>

Вот что Вы нам написали: <br><i>Киса и Ося здесь были</i>


Веб-клиент (браузер) переведет этот HTML-текст в форматированное представление, и пользователь на своем экране увидит его таким:

Приветствуем Вас, уважаемый отец Федор!

Вот что Вы нам написали:

Киса и Ося здесь были

Взаимодействие сценария PHP с базами данных MySQL

В языке серверных сценариев PHP взаимодействие с базами данных MySQL, работе с которыми была посвящена моя предыдущая статья, организовано и просто, и логично.

Для начала надо объявить в PHP-сценарии 4 переменные: $server_name, $user_name, $user_pass и $db_name, которым мы присвоим соответственно имя сервера, имя пользователя MySQL, его пароль и имя базы данных. Обычно эти данные сообщает нам хостер, у которого мы держим свой сайт. Пусть, например:


$server_name= "localhost"; // для испытаний на своем компьютере

$user_name= "my_name";

$user_pass= "my_password";

$db_name= "my_database";


Откроем теперь соединение с сервером MySQL, вызвав на выполнение функцию mysql_connect:


$connection = mysql_connect($server_name, $user_name, $user_pass);


Функция при успешном выполнении возвращает дескриптор соединения, который будет в дальнейшем необходим для вызова других функций, в том числе и выполняющих SQL-запросы. Если соединиться не удалось, то функция вернет 0, так что ее результат обязательно надо проверить. Чтобы корректно прервать выполнение программы и вывести на экран причину неудачи, воспользуемся следующей конструкцией:


$connection = mysql_connect($server_name, $user_name, $user_pass)

or die ("Соединение установить не удалось: ". mysql_error());


Встроенная в язык функция die (от англ. «умереть») уже описывалась выше. Она прерывает работу с выдачей сообщения, а функция mysql_error возвращает причину неудачи в виде строки, которую мы сшили с нашим предварительным пояснением. Описанная конструкция используется и для других функций для работы с базами данных MySql в PHP, так что в дальнейшем изложении заострять на этом внимание я уже не буду.

Чтобы выбрать для работы базу данных, выполним функцию:


mysql_select_db($db_name, $connection);


Обратите внимание, что при выборе базы данных мы указали не только ее имя, но и дескриптор текущего соединения с сервером MySQL. Чтобы выполнить SQL-запрос, используется следующая функция:


$result = mysql_query("SELECT id, name FROM goods", $connection);


В качестве примера SQL-запроса выбран запрос из предыдущей статьи, посвященной SQL. Этот запрос позволяет просмотреть нам все строки товарного справочника.

Товарный справочник GOODS
ID NAME PRICE UNIT COUNTRY
1 Яблоки 50.00 кг Россия
2 Груши 60.40 кг Франция
3 Апельсины 40.00 кг Марокко
4 Макароны 21.00 шт. Франция
5 Кефир 25.30 шт. Россия
6 Молоко 30.50 шт. Россия

Обратите внимание: функция mysql_query возвращает нам не запрошенные строки, а нечто эфемерное — дескриптор результата SQL-запроса. Чем-то это напоминает дебетовую карту, на которой деньги хотя и лежат, но для использования должны быть обналичены. Роль банкомата по извлечению «живых» данных из безликого дескриптора выполняет серия команд, из которых для примера приведу одну характерную:


$row = mysql_fetch_array($result);


При каждом вызове этой функции она извлекает по одной строке из результата выполненного SQL-запроса и сбрасывает ее данные в массив $row (колонка за колонкой). Данные первой колонки попадают в элемент массива $row[0], второй — в $row[1] и т.д. Так, при первом обращении к данным таблицы 1 (товарный справочник) мы получим в $ row такие данные: (1, Яблоки), при повторном обращении: (2, Груши).

Чтобы освободить ресурсы памяти, использованные в ходе выполнения запроса, следует выполнить функцию:


$mysql_free_result($result);


А чтобы закрыть соединение с сервером MySQL — функцию:


$mysql_close($connection);


Соберем теперь все эти разрозненные строки в простейший PHP-сценарий по извлечению данных из базы MySQL:


$connection = mysql_connect($server_name, $user_name, $user_pass)

or die ("Соединение установить не удалось: ". mysql_error());

mysql_select_db($db_name, $connection);

$result = mysql_query("SELECT id, name FROM goods", $connection);

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

  echo("ID: ".$row[0].", NAME: ".$row[1]." style="color:#990000"><BR>");

}

$mysql_free_result($result);

$mysql_close($connection);


Мы используем здесь оператор цикла while, для того чтобы «пробежать» по всем строкам, которые нам вернул SQL-запрос, и содержимое колонок ID и NAME вывести на HTML-страницу. Константой MYSQL_NUM в качестве второго параметра функции mysql_fetch_array мы явно указываем, что будем обращаться к массиву $row строго по номерам колонок. Однако используя в качестве второго параметра константу MYSQL_ASSOC, мы можем получить массив $row как ассоциированный с названиями колонок и сделать тем самым текст программы более наглядным и менее зависимым от физического порядка колонок в запросе:


while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

  echo("ID: ".$row[id].", NAME: ".$row[name]." style="color:#990000"><BR>");

}


По умолчанию же используется менее экономное по расходу ресурсов, но более универсальное значение параметра MYSQL_BOTH, дающее полную свободу в способе обращения к массиву.

Страницу, которую мы таким образом получили, никак уже не назовешь статической. Она будет создана «на лету» на основе информации, которая к этому времени будет внесена в базу данных. Само же создание базы и изменение ее содержимого осуществляются тем же самым механизмом, что и описанный выше. Достаточно лишь изменить запрос на входе функции mysql_query и убрать блок while, вызывавший ненужную в этом случае функцию mysql_fetch_array.

Поскольку это все-таки мини-учебник, пора остановиться. Подробную и великолепно организованную документацию можно найти на «родном» сайте проекта: www.php.net — но, разумеется, не только на нем.

Другие языки серверных сценариев

В рамках настоящей статьи невозможно даже кратко описать все языки серверных сценариев. Но чтобы дать о них хотя бы общее представление, покажем на простых примерах, как обратиться к базе данных MySQL с помощью сценариев, написанных на языках Perl и Python.

Взаимодействие сценария Perl с базами данных MySQL

В языке Perl имена всех скалярных переменных начинаются с символа $. Однако в отличие от PHP имена простых и ассоциативных массивов начинаются с символов @ и %, соответственно.


Магия символов
136KB
Программированию работы с базами данных на Perl посвящена отдельная книга.

Символы $, @ и %, c которых в языке Perl должны начинаться соответственно все имена скалярных переменных, массивов и хэшей (ассоциативных массивов), выбраны такими не случайно:

$ выбран за сходство с первой буквой слова string (строка) ;

@ выбран за сходство с первой буквой слова array (массив);

% выбран за сходство с сокращенной записью a/a, означавшей associated array (ассоциативный массив).

Будем считать, что, как и в предыдущем разделе, мы установили переменные: $server_name, $user_name, $user_pass и $db_name, которым присвоили соответственно имя сервера, имя пользователя MySQL, его пароль и имя базы данных.


use DBI;

my $server_name = "localhost";

my $user_name = "my_name";

my $user_pass = "my_password";

my $db_name = "my_database";

my $connection = DBI->connect("dbi:mysql:$db_name:$server_name", $user_name, $user_pass) or die “Не могу соединиться с базой данных”;

my $query = "SELECT id, name FROM goods";

my $result = $connection ->prepare($query);

$result->execute;

while(@row = $result->fetchrow_array) {

  print join(",", @row)," style="color:#990000"><BR>";

}

$result->finish;

$connection->disconnect;


Этот код похож на аналогичный код на PHP из предыдущего раздела, поэтому посмотрим на отличия.

Perl использует для работы с базами данных общий интерфейс DBI (DataBase Interface), к которому подключаются драйверы DBD (DataBase Driver) различных СУБД. Это позволяет писать универсальный программный код, который путем минимального числа переделок можно приспособить к любой другой СУБД. Эта особенность выражается хотя бы в том, что в отличие от PHP в названиях функций не встречается специфический префикс «mysql_». Первая строка сценария


use DBI;


указывает интерпретатору языка на необходимость подключения модуля DBI. Строка


my $connection = DBI->connect("dbi:mysql:$db_name:$server_name", $user_name, $user_pass);


устанавливает соединение с базой данных.

Функция DBI->connect из только что подключенного модуля устанавливает соединение с базой данных MySQL. Первый параметр состоит фактически из четырех подпараметров, разделенных двоеточиями, первые два из которых указывают на необходимость соединения через драйвер DBI/DBD MySQL. В этой строке $connection — дескриптор соединения, ссылка на который позволит вызвать многие другие функции по работе с базой данных.

Приставленное к этой переменной «my» ограничивает область ее видимости данным программным модулем. Дело в том, что в Perl, в отличие от многих других языков программирования, все переменные по умолчанию видимы глобально.

Выполнение запроса, в отличие от PHP, почти всегда осуществляется в два этапа: подготовка (производится грамматический разбор) и собственно выполнение. Дескриптор запроса, с помощью которого можно будет затем получить данные, возвращается уже на первом этапе. Можно сделать и в один этап, но тогда запрос придется в следующий раз готовить заново, а это съедает определенное время.

Дальше в уже знакомом цикле while считывается по одной строке результата SQL-запроса. Значения колонок раскладываются в массив $row. При выводе на экран элементы этого массива используется функция join, которая «сшивает» значения из последовательных колонок через запятую и пробел в качестве разделителя.

Две последние строки убирают за собой: функция finish освобождает ресурсы, захваченные при выполнении SQL-запроса, а функция disconnect разрывает соединение с базой данных.

Взаимодействие сценария на языке Python с базами данных MySQL

На языке Python серверный сценарий такого же назначения будет выглядеть примерно так:

Этот сценарий, хотя и написан на другом языке, не нуждается в особой расшифровке. Его работа основана на тех же принципах, что и работа сценариев PHP и Perl. Используется свой интерфейс DB-API, или, как в этой среде говорят: «engine» («моторчик»), своя библиотека для работы с MySQL — MySQLdb, свой оператор цикла for, играющий ту же роль, что и оператор while в предыдущих примерах. Код разбит на блок try и except, для того чтобы закрытие соединения произошло гарантированно, даже в случае сбоев и ошибок в ходя выполнения сценария (именно в этом случае выполняется блок except).


Великий змей
114KB
На этой книге действительно нарисован питон. А на предыдщем издании - нет.

Язык Python был создан в начале 1990-х сотрудником голландского института CWI Гвидо ван Россумом (Guido van Rossum). Для распределенной ОС Amoeba требовался расширяемый объектно-ориентированный сценарный язык, и Гвидо, участвовавший до этого в создании языка АВС, начал на досуге разрабатывать новый язык на основе имевшихся наработок.

Название языка не имеет никакого отношения к пресмыкающимся. Автор назвал его в честь популярного британского комедийного сериала 70-х годов «Воздушный цирк Монти Пайтона». Несмотря на это, и пиктограммы файлов-сценариев этого языка, и эмблема на сайте python.org изображают именно змеиные головы. Но было бы даже странно, если бы в качестве талисмана языка было выбрано какое-то другое животное.

В заключение

Языки серверных сценариев - удобный, практичный и почти незаменимый инструмент при построении динамичных интерактивных сайтов. Выполняясь на стороне веб-сервера, они позволяют формировать страницы на основе информации, хранящейся в базах данных, принимать информацию от пользователей через формы, автоматически отправлять почту и делать многое другое.

Модульное строение  обеспечивает легкость расширения, что позволяет их создателям быстро реагировать на появление новых протоколов и технологий.

Сценарии не компилируются, а обрабатываются интерпретаторами – это упрощает изменения при необходимости, которая возникает достаточно часто. При этом текст сценариев, как правило, закрыт от конечного пользователя, что важно и для безопасности сайтов, и для сохранения в секрете авторских «ноу хау».

Использование свободно распространяемых языков серверных сценариев привело к появлению большого количества типовых CMS-систем (форумов, фото-галерей, новостных лент, интернет-магазинов), что позволило подключить к их установке неспециалистов и тем самым качественно изменило облик всемирной паутины.

Статьи появляются на сайте не ранее, чем через 2 месяца после публикации в журнале.
ЧИТАТЕЛЬСКИЙ
РЕЙТИНГ
МАТЕРИАЛА
8.9
проголосовало человек: 76
1 2 3 4 5 6 7 8 9 10
вверх
Rambler's Top100 Рейтинг@Mail.ru Яндекс цитирования