На автозапчасти, отправленного с клиентской машины

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

Иначе обстоит дело при серверном Web-программировании, т.е. создании программ, выполняющихся на сервере. Как было сказано ранее, такие программы чаще всего пишут на языке PHP.

Для демонстрации принципов серверного Web-программиро- вания мы создадим сайт, иллюстрирующий работу магазина авто- запчастей [8]. Как увидим далее при описании функционально- сти, сайт наш будет интерактивный (пользователь будет вводить данные, серверная программа на языке PHP эти данные будет об- рабатывать и выдавать результат). Следовательно, такой сайт нельзя будет отлаживать на локальном компьютере только с по- мощью браузера, как отлаживаются статические сайты. Нельзя хотя бы потому, что в составе браузера нет интерпретатора языка PHP (есть и другие причины).

Такой сайт уже на этапе создания и отладки надо поместить на Web-сервер. Мы так и сделаем. Но мы поместим свой сайт не на

«настоящем» удаленном Web-сервере, принадлежащем провайде- ру, а воспользуемся локальным или, по-другому, виртуальным Web-сервером, имитирующим удаленный сервер. Материал об установке такого Web-сервера дан в разделе 2.3.

На нашем локальном сервере сайт будет представлен двумя файлами:

C:\WebServers\home\autoparts\www\Index.htm, Obrabotka.php.

Обратившись по адресу http://autoparts к сайту магазина, мы будем получать форму для ввода заказа (рис. 2.1). Обратите вни- мание на то, что мы указываем только часть адреса сайта, осталь- ная часть формируется сервером.

Запчасти от Занифа

Товар Количество
Шины    
Масло    
Свечи зажигания    
  От прав ить заказ  
         

Рис. 2.1. Форма для ввода заказа

Форма должна будет храниться на сервере в папке сайта в файле под именем index.htm. В форме для ввода количества зака- зываемых товаров используются текстовые поля. Для отправки заполненной формы на сервер служит кнопка Отправить заказ.

Для обработки заказа и вывода на экран клиента результатов обработки на сервере в папке сайта должна быть программа об- работки заказа, написанная на языке PHP. Назовем ее obrabotka.php.

Код формы (в файле index.htm) будет следующий.

Листинг 2.1

<html>

<body>

<h1>Запчасти от Занифа</h1>

<h2>Форма заказа</h2>

<form action="obrabotka.php" method="post">

<table border=2>

<tr bgcolor=#cccccc>

<td width=150>Товар</td>

<td width=100>Количество</td>

</tr>

<tr>

<td>Шины</td>

<td align="center"><input type="text" name="tireqty" size=3 maxlength=3> </td>

</tr>

<tr>

<td> Масло</td>

<td align="center"> <input type="text" name="oilqty" size=3 maxlength=3></td>

</tr>

<tr>

<td>Свечи зажигания</td>

<td align=center> <input type="text" name="sparkqty" size=3 maxlength=3></td>

</tr>

<tr>

<td colspan=2 align=center> <input type="submit" value="Отправить заказ"></td>

</tr>

</table>

</form>

</body>

</html>

Комментарии к коду формы

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

Для отправки заполненной формы на сервер служит кнопка Submit.

В теге :

<form action="obrabotka.php" method="post">

указаны:

· метод передачи данных на сервер — method="post"

· имя серверной PHP-программы для обработки заказа — obrabotka.php

Заполнив заказ, отправляем его на сервер, нажав кнопку Submit.

Необходимо, конечно, понимать метод передачи данных с формы на сервер — post. Этим мы займемся позже.

Пока примем на веру то, что имена текстовых полей для ввода количества заказываемых изделий в коде формы (tireqty, oilqty, sparkqty) должны использоваться и в программе obrabotka.php, обрабатывающей заказ и формирующей Web-страницу для от- правки клиенту.

Как только программа obrabotka.php получит значения полей tireqty, oilqty, sparkqty, она начнет работать и, для наших введен- ных в форму данных, результат обработки вернет на клиентскую машину в виде следующей Web-страницы.

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.2. Web-страница с результатом обработки заказа

В случае пустых полей ввода должно быть выдано сообщение: Вы ничего не заказали на предыдущей странице! Цвет текста должен быть красный.

Серверная PHP-программа для такой обработки заказа — obrabotka.php будет иметь следующий код.

Листинг 2.2

<html>

<head>

<title>автозапчасти от Занифа</title>

</head>

<body>

<h1 align="center"> Автозапчасти от Занифа</h1>

<h2 align="center"> Результаты заказа</h2>

<?

echo "Заказ обработан в "; echo date ("H:i.d.m.Y")."<br>";

$totalqty=$tireqty+$oilqty+$sparkqty; if ($totalqty==0)

{

echo "<font color=red>";

echo "Вы ничего не заказали на предыдущей странице"; echo "</font>";

exit();

}

echo "Ваш заказ следующий:<br>"; echo $tireqty." шины <br>";

echo $oilqty." масло <br>"; echo $sparkqty." свечи <br>";

echo "<br>Заказано всего: ".$totalqty."<br>"; define ("TIREPRICE",1000);

define ("OILPRICE",300); define ("SPARKPRICE",100);

$totalamount=TIREPRICE*$tireqty+OILPRICE*$oilqty+

SPARKPRICE*$sparkqty;

$totalamountf=number_format($totalamount,2);

echo "<br> Стоимость заказа без налога:".$totalamountf;

$taxrate=0.1;

$totalamount=$totalamount*(1+$taxrate);

$totalamountf=number_format($totalamount,2);

echo "<br> Стоимость заказа с налогом:".$totalamountf;

?>

</body>

2.2. Особенности синтаксиса языка PHP

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

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

Таблица 2.1

Действие Пример и описание
Внедрение PHP-скриптов в HTML-код Простейший способ такой: <? PHP-скрипт ?>
Комментарий однострочный // Вывод даты в формате: 23:15, 08.05.2009 или # Однострочный комментарий
Комментарий многостроч- ный /* Многострочный комментарий*/
Оператор программы завер- шается символом «;». Сим- вол «;» ставится даже перед «else» $totalqty=$tireqty+$oilqty+$sparkqty;
Правила конструирования идентификаторов Первым символом в идентификаторах переменных должен быть символ $. Ос- тальные требования к идентификаторам как в Паскале. Но идентификаторы регистрозависимые (однако, имена встроенных функций и служебные слова не регистрозависимые)
Строковые значения заклю- чаются в кавычки $name=”Расмус Лердоф”;
Задание констант define("OILPRICE", 300);
Вывод данных на экран Оператор echo
Перевод курсора в начало следующей строки echo "<br>";
Тег <P> перед выводимой строкой вставляет пустую строку echo "<p>Ваш заказ следующий";
Вывод строкового значения echo "Заказ обработан в ";
Вывод значения арифмети- ческого выражения echo (20+12); или Echo 20+12;
Вывод значения переменной echo $name;
Вывод значения константы echo CONST; //здесь CONST имя констан- ты
Вывод смешанного значения echo "$oilqty бутылки масла <br>";
Конкатенация echo $oilqty. " бутылки масла <br>";
Конкатенация и вычисление значения функции Echo “В массиве ”. count($arr). “элемен- тов”
Вывод имен переменных без интерпретации в виде по- следовательности символов Echo ‘$name Расмус Лердоф’; (выведет строку «$name Расмус Лердоф»)
Вывод значения функции echo date ("H:i, d. m. y.");
Форматирование для вывода числа с двумя десятичными знаками $totalamountf=number_format ($totalamount,2);
Условный оператор If (условие) {ветвь 1}; else {ветвь 2};

Обратите внимание на то, что имена текстовых полей для вво- да количества заказываемых изделий в коде формы (tireqty, oilqty, sparkqty) с очень небольшим изменением используются и в про- грамме obrabotka.php, обрабатывающей заказ и формирующей Web-страницу для отправки клиенту. Изменение имен полей сво- дится к добавлению в начало идентификатора символа $.

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

2.3. Методы передачи информации в серверную PHP-программу

В серверном Web-программировании достаточно распростра- ненной задачей является передача данных (параметров) PHP-про- грамме извне (из другой программы, из адресной строки браузера).

В подразделе 2.1 потребовалась передача данных, введенных в форму, и имен этих данных обрабатывающей PHP-программе. Там для этого был использован метод POST.

2.3.1. Метод POST

Работает следующим образом. Данные, необходимые обраба- тывающей программе, вводятся пользователем в соответствую- щие поля HTML-формы (рис. 2.1). В нашей задаче это поля типа Text.

При нажатии кнопки типа Submit (у нас это кнопка Отпра- вить заказ) имена полей ввода и введенные в них значения от- правляются на сервер блоком данных и там могут быть использо- ваны указанной в теге <FORM> программой (у нас это программа из файла obrabotka.php).

Чтобы обеспечить такую совместимость, в обрабатывающей программе для обозначения получаемых с формы данных надо использовать имена, получаемые путем добавления к именам по- лей формы символа $ (в нашем примере — $tireqty, $oilqty,

$sparkqty).

На некоторых серверах в обрабатывающей программе эти имена и значения переменных можно использовать без всяких подготовительных операций (как в нашей программе):

echo $tireqty. " шины <br>";

echo $oilqty. " бутылки масла <br>"; echo $sparkqty. " свечи зажигания <br>";

Но эта возможность определяется состоянием директивы regis- ter_globals в разделе Data Handling конфигурационного файла php.ini (он находится по адресу c:\webservers\usr\local\php5\php.ini). Если она выключена (по умолчанию это так), т.е. register_globals= Off, такое прямое использование будет запрещено.

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

$_POST= array (“tireqty” =>2, “oilqty” => 1, “sparkqty” =>4)

Здесь показан один из способов формирования ассоциативного массива в PHP.

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

Для такого сервера нашу обрабатывающую программу при- шлось бы изменить. А именно, значения требуемых переменных пришлось бы брать из суперглобального массива таким образом:

$tireqty =$_POST [“tireqty”];

$oilqty =$_POST [“toilqty”];

$sparkqty =$_POST [“sparkqty”];

2.3.2. Метод GET

При отправке данных с формы на сервер по методу GET со- держимое формы добавляется в адресной строке браузера к URL программы, принимающей эти данные, в следующем виде:

http://action.php?name1=value1&name2=value2&name3=value3. Здесь action.php— это URL-адрес программы, которая долж-

на обрабатывать форму. Обычно это программа, заданная в атри- буте actionтега form. Имена name1, name2, name3 соответст- вуют именам элементов формы, а value1, value2, value3 — значениям этих элементов.

В нашем примере после ввода данных в форму и нажатия кла- виши Отправить заказв адресную строку браузера занесется следующее значение:

http://autoparts/obrabotka.php?tireqty=2&oilqty=1&sparqqty=4. Таким образом, передача данных серверной программе по ме-

тоду GET происходит совсем не так, как при методе POST. А именно, передаваемые данные «проходят» через адресную строку браузера, и они видны пользователю (рис. 2.3).

В принципе, для передачи данных методом GET вводить дан- ные в поля HTML-формы не обязательно. Можно просто доба- вить в строку URL нужные переменные и их значения.

Это будет выглядеть, как представлено на рис. 2.4. И данные будут переданы в серверную программу, хотя в поля формы дан- ные не введены.

На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.3. Передача данных с формой по методу GET

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.4. Передача данных с формой без заполнения формы

Итак, из рассмотренного примера понятно, что для полей вво- да текста (это элементы inputс атрибутом type=text) переда- ваемым значением будет то, что введет пользователь. Это же справедливо и для поля ввода пароля (тег inputс атрибутом type=password). Если пользователь ничего не вводит в такое поле, то в строке адреса будет присутствовать элемент name= (без значения), где name соответствует имени этого элемен- та формы.

Доступ к переданным данным в серверной программе проис- ходит по той же схеме, что и в методе POST. Если директива register_globals в конфигурационном файле php.ini включена, пе- реданные из формы значения можно использовать напрямую.

В противном случае данные придется извлекать из супергло- бального массива $_GET:

$tireqty =$_GET [“tireqty”];

$oilqty =$_GET [“oilqty”];

$sparkqty =$_GET [“sparkqty”];

После рассмотрения обоих методов передачи данных в сер- верную программу возникает вопрос: «А нельзя ли обходиться только методом POST?» В основном так и делается. Но использо- вать метод GET удобно при отладке скриптов (тогда можно ви- деть имена и значения передаваемых данных) [7].

2.4. Варианты передачи данных серверной программе с разных элементов формы

На практике для передачи данных серверной программе с по- мощью формы используются не только рассмотренные выше по- ля типов text и password. Бывает потребность брать данные с по- лей типов: Radio, CheckBox, Select, Textarea.

Работу с полями этих типов рассмотрим на примере обработки анкетных данных (рис. 2.5).

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.5. Форма для заполнения анкеты

Такая Web-страница создается следующим HTML-кодом.

Листинг 2.3

<h3 align="center">Анкета </h3>

<form action="obrabotka.php" method="post"> Введите фамилию и инициалы:

<input type="text" name="fio" size=30><br>

E-mail: <input type="text" name="email" size=30><p>

Укажите, к какой группе пользователей вы себя относите:<br>

<input type="radio" name="group" value="предприниматель">предприниматель<br>

<input type="radio" name="group" value="студент">студент<br>

<input type="radio" name="group" value="преподаватель">преподаватель<p>

Какие из сервисов Интернета вы используете наиболее часто:

<br>

<input type="checkbox" name="service[]" value="www"> WWW

<br>

<input type="checkbox" name="service[]" value="e-mail"> e-mail

<br>

<input type="checkbox" name="service[]" value="ftp">FTP<p> Каким браузером вы пользуетесь :<br>

<select name="browser[]" multiple>

<option value="Internet Explorer" selected> Internet Explorer

<option value="Netscape Navigator"> Netscape Navigator

<option value="Opera"> Opera

<option value="Mozilla Firefox"> Mozilla Firefox

</select> <p>

Какую еще информацию вы хотели бы видеть на нашем сайте?

<br>

<textarea name="pojelanie" rows=4 cols=30></textarea><p>

<input type="submit" value="Отправить">

<input type="reset" value="Очистить">

Чтобы понять работу скрипта, обрабатывающего анкету, сле- дует уяснить следующее.

Имена радиокнопок одинаковые (group), но кнопки отличают- ся значениями атрибута value.

Имена независимых переключателей (флажков) тоже одинако- вые (service). Они тоже отличаются значениями атрибута value. Но в отличие от радиокнопок, в этом случае может быть выбрано любое количество флажков (от 0 до 3 в нашем примере). Поэтому значение атрибута name наших флажков задается в виде массива: name="service[]". А PHP-скрипт можно разработать такой, чтобы, обработав массив, можно было разобраться, что выбрал пользова- тель. Заметим также, что в материалах по языку HTML возмож- ность задания имени группы флажков в виде массива обычно не упоминается.

Для раскрывающегося списка тоже имеется возможность вы- бора нескольких опций из списка. Для этого в нашем примере в теге select значение атрибута name задается в виде массива:

<select name="browsers[]">.

Надо заметить, что в обоих случаях, если значение атрибута name не задавать в виде массива, выбирать можно будет только одну кнопку (checkbox) и одну опцию (select). Обрабатывать эти поля надо не как массив, а как обычную переменную.

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

После обработки нашей анкеты пользователь должен получить результат в виде следующей Web-страницы.

Рис. 2.6. Результат обработки анкеты

Такую обработку анкеты может выполнить следующий скрипт.

<body>

<?

$fio=$_POST["'fio'];

$email=$_POST["email"];

//if (isset($_POST['group']))

$selected_radio = $_POST['group'];

echo "Уважаемый $fio !<br>";

echo "Вы ". $selected_radio." <br>";

echo "Из сервисов Интернета Вы используете наиболее часто:

<br>";

foreach ($_POST["service"] as $index=>$value)

{echo "$value<br>";}

echo "Вы пользуетесь браузером: <br>"; foreach ($_POST["browser"]

as $index=>$value)

{echo "$value<br>";}

$pojelanie = $_POST["pojelanie"];

echo "Ваше пожелание следующее:<br>"; echo $pojelanie;

?>

</body>

</html>

Разбор скрипта начнем с 6-й строки: $selected_radio =

$_POST['group'].

Так как выбранной может быть только одна радиокнопка, при обработке группы из трех радиокнопок в суперглобальный мас- сив попадает значение атрибута value той радиокнопки, которая была выбрана пользователем. В нашем примере это радиокнопка со значением “студент”. Переменной $selected_radio присваивает- ся именно это значение.

Строки 9—12 обрабатывают группу из трех флажков, соответ- ствующих трем сервисам Интернета.

echo "Из сервисов Интернета Вы используете наиболее часто:

<br>";

foreach ($_POST["service"] as $index=>$value)

{echo "$value<br>";}

В отличие от радиокнопок, в этом случае может быть выбрано любое количество флажков, и их значения помещаются в супер- глобальный массив $_POST["service"]. Для выборки значений из этого массива используется функция foreach. Она по очереди про- сматривает элементы массива, а оператор echo выводит значения элементов на экран.

Строки 13—16 обрабатывают раскрывающееся меню, содер- жащее 4 значения.

echo "Вы пользуетесь браузером: <br>"; foreach ($_POST["browser"]

as $index=>$value)

{echo "$value<br>";}

Хотя в нашей анкете элемент формы select позволяет одновре- менно выбрать только одну опцию из списка, есть возможность превратить его в элемент с множественным выбором. Для этого в тег select надо было бы добавить атрибут multiple таким образом:

<select name="browser[]" multiple>.

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

$_POST["service"]. Для выборки значений из этого массива, как и в предыдущем фрагменте, используется функция foreach. Она по очереди просматривает элементы массива, а оператор echo выво- дит значения элементов на экран.

Строки 17—19 обрабатывают многострочное текстовое поле с именем pojelanie.

$pojelanie = $_POST["pojelanie"];

echo "Ваше пожелание следующее:<br>"; echo $pojelanie;

Как видим, многострочное текстовое поле (textarea) обрабаты- вается точно так же, как и простое текстовое поле (text).

Теперь, после рассмотрения вариантов передачи данных со всех типов элементов ввода в форму, можно вернуться к рассмот- рению структуры суперглобального массива $_POST. Для нашей анкеты после его заполнения этот массив будет содержать сле- дующие элементы с их индексами:

· $_POST["fio"] = Скриптов С.С;

· $_POST["email"] =scr12@ mail.ru;

· $_POST["group"] = студент;

· $_POST["service"[0]] = WWW;

· $_POST["service"[1]] = email;

· $_POST["browser"[0]] = Mozilla Firefox;

· $_POST["pojelanie"] = Материалы по Web-программированию. Еще раз обратим внимание на то, что два элемента суперглобаль- ного массива, а именно $_POST["service"[]] и $_POST["browsers"[0]] сами являются массивами. Причем размерность их зависит от того,

сколько значений выбрал пользователь.

2.5. Проверка данных, введенных в форму

При передаче данных из формы в серверную программу необ- ходимо бывает организовать контроль:

· полноты введенных данных (все ли поля заполнены);

· корректности введенных данных (например, по типу — бу- квы или числа);

· корректности введенных данных (например, вхождение зна- чений данных в заданный диапазон).

С этой целью рассмотрим еще один пример.

Составим серверное Web-приложение, выполняющее следую- щие функции.

1. Вывод формы с запросом на ввод сторон треугольника.

2. После завершения ввода и нажатия кнопки типа Submit проверка на полноту ввода.

3. Проверка того, что в поля ввода введены только числа.

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

5. Обеспечение в любом из предыдущих трех случаев непра- вильного ввода повторного ввода данных в форму.

6. Вычисление площади треугольника по формуле Герона.

Форма для решения задачи может иметь следующий вид (рис. 2.7).

На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.7. Форма для ввода исходных данных для решения задачи

Для ее реализации потребуется такой HTML-код:

Листинг 2.4

<html><title>Вычисление площади треугольника</title>

<body>

<form action="obrabotka.php" method="POST"> Введите стороны треугольника:

<br>a = <input type="text" name="a">

<br>b = <input type="text" name="b">

<br>c = <input type="text" name="c">

<p><input type="submit" value="Вычислить">

</form></body></html>

PHP-скрипт для решения нашей задачи будет такой:

Листинг 2.5

<html><title>Вычисление площади треугольника</title><body>

<?php

$a=$_POST["a"];

$b=$_POST["b"];

$c=$_POST["c"]; if(!is_numeric($a)||!is_numeric($b)||!is_numeric($c))

{echo "Ошибка! Введены не числа или заполнены не все поля. "; echo"<a href='index.htm'>На повторный ввод</a>";

exit();}

if($a+$b<=$c||$a+$c<=$b||$b+$b<=$a)

{echo "Ошибка! Эти значения не могут быть сторонами тре- угольника. ";

echo"<a href='index.htm'>На повторный ввод</a>"; exit();}

$pp=($a+$b+$c)/2;

$s_tr=sqrt($pp*($pp-$a)*($pp-$b)*($pp-$c)); echo "Площадь треугольника = ".$s_tr;

?>

</body></html>

Разбор скрипта следует начать с 6-й строки. Она содержит ус- ловие проверки ввода числовых значений во все поля формы. Функция is_numeric($a) возвращает значение true только в том случае, если переменная $a содержит данные, и эти данные явля- ются числом. В остальных случаях (поле не заполнено или в него введены не цифры) результатом выполнения этой функции будет значение false.

Если условие в строке 6 будет выполнено, значит пользователь ввел неверные данные или что-то не ввел. Об этом ему сообщит строка 7: «Ошибка! Введены не числа или заполнены не все поля». Строка 8 выведет гиперссылку На повторный ввод. Щелчок по этой ссылке снова вызовет на экран форму для ввода исходных данных.

Вызов функции exit() в строках 9 и 13 нужен для завершения выполнения скрипта после вывода формы для повторного ввода данных.

Строка 10 содержит условие проверки корректности введен- ных длин сторон треугольника. При некорректности введенных значений строка 11 выводит сообщение: «Ошибка! Эти значения не могут быть сторонами треугольника».

Строка 12 выведет гиперссылку На повторный ввод. Щелчок по этой ссылке снова вызовет на экран форму для ввода исходных данных.

Строки 14—16 выполняются, когда во все поля формы будут введены правильные значения. Здесь вычисляется площадь тре- угольника по форме Герона и выводится результат.

2.6. Разработка и отладка локального сайта с помощью локального сервера

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

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

Выходом из этой ситуации является установка виртуального сервера на своей локальной машине. Установив такой сервер, ин- терактивный сайт можно создать и отладить на своей машине. Далее отлаженный сайт можно выставить в Интернет.

2.6.1. Система Денвер

Есть прекрасные варианты решения этой проблемы. Наиболее известное решение — это использование «джентльменского на- бора» сайтостроителя — бесплатного пакета Денвер.

Денвер - локальный сервер. Скачать Денвер, установить WAMP сервер для localhost (PHP 5.3.13, MySQL 5.1, PostgreSQL 8.4 etc.)

Джентльменский набор Web-разработчика («Д.н.w.р», читается «Денвер») — проект Дмитрия Котерова, локальный сервер (Apache, PHP, MySQL, Perl и т.д.) и программная оболочка, используемые Web-разработчиками для разработки сайтов на «домашней» (локальной) Windows-машине без необходимости выхода в Интернет. Главная особенность Денвера — удобство при удаленной работе сразу над несколькими независимыми проектами и возможность размещения на Flash-накопителе.

· графический интерфейс СУБД MySQL — программа phpMyAdmin 3.2.3.

Этот пакет отработан очень хорошо. Установка происходит легко, быстро и без ошибок.

2.6.2. Установка Web-сервера на локальном компьютере

1. Запускаем инсталлятор.

2. В процессе инсталляции Денвера нам придется ответить на задаваемые вопросы следующим образом:

· Название папки для установки: например WebServer;

· В качестве буквы будущего виртуального диска примем предложенную букву Z;

· Выберем предложенный режим 1;

· Принимаем предложение Создать ярлыки на рабочем столе (Start servers, ReStart servers, Stop servers).

Более подробное описание установки можно посмотреть в интернете, например на ресурсе http://codeacademy.ru/blog/66/nastroika-instrumentariya-dlya-raboty-s-php-denver.

2.6.3. Структура папок локального Web-сервера

При установке Denver в папку Webservers создаются сле- дующие папки (рис. 2.8—2.14).

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.8. Содержание папки WebServers

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.9. Содержание папки WebServers3\denver

На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.10. Содержание папки WebServers\tmp

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.11. Содержание папки WebServers\usr

В папке usr\local при дальнейшем погружении можно увидеть:

· Сервер Apache

· СУБД MySQL

· Интерпретатор PHP

Довольно подробное описание системы Денвер дано в файле Readme.txt в папке websrevers.

HTML-документы должны находиться в директориях

/home/localhost /www. Содержимое директории home показано на следующем рисунке.

 
  На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.12. Содержание папки WebServers\home

При инсталляции Денвера сконфигурированы 3 виртуальных хоста: custom, localhost и test1.ru (cgi_glob не сайт, там хранятся cgi-скрипты).

В директории третьего хоста (/home/test1.ru/www) расположе- на тестовая страница, содержащая некоторую информацию о на- стройках PHP, переменных окружения и т.д., выводимая функци- ей PHP phpinfo().

Наш домен под именем autopartsтоже будет создан здесь.

Для создания нового сайта в каталоге autopartsнадо создать папку WWW. В нее помещаются файлы и папки сайта, в частно- сти, обязательный запускной файл index.htm. Именно он выдается браузеру после указания в адресной строке адреса сайта: http://autoparts.

Требуемое содержимое папки autopartsпредставлено на сле- дующем рисунке.

           
  На автозапчасти, отправленного с клиентской машины - student2.ru   На автозапчасти, отправленного с клиентской машины - student2.ru   На автозапчасти, отправленного с клиентской машины - student2.ru
 
 

Рис. 2.13. Содержание папки WebServers\home\

Теперь, если, запустив браузер, в адресной строке набрать ад- рес http://autoparts и нажать Enter, откроется наша форма заказа из файла index.htm.

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

Получив адрес сайта, браузер сразу же обращается к файлу c:\windows\system32\drivers\etc\hosts. Там, как видим из следую- щего рисунка, имеется перечень доменов компьютера.

На автозапчасти, отправленного с клиентской машины - student2.ru

Рис. 2.14. Перечень доменов компьютера

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

Таблица 2.2.

Доменное имя Директория документов
abcd.test1.ru /home/test1.ru/abcd
ab.cd.test1.ru /home/test1.ru/ab.cd
test.localhost /home/localhost/test
ab.cd.localhost /home/localhost/ab.cd

2.6.4. Порядок создания интерактивного сайта

1.Создать папку autopartsпо адресу C:\WebServers\home. В этой папке создать папку www.

2. Набрать в редакторе Блокнот код Web-страницы с формой заказа автозапчастей. Сохранить страницу в файле index.htm и поместить ее в папку www.

3. Набрать код PHP-программы для обработки заказа из формы. Сохранить программу в файле obrabotka.php и поместить ее тоже в папку www.

4. Запустить локальный сервер.

5. Набрать в адресной строке браузера адрес: http://autoparts, нажать Enter. Откроется наша форма заказа из файла index.htm.

6. Заполнить заказ, отправить его. Получить результат от сер- вера. Изучить результат обработки.

7. В случае ошибок отладить форму и/или PHP-программу.

Контрольные вопросы

1. Можно ли отлаживать PHP-скрипты на клиентской машине?

2. Укажите адрес создаваемого нами на виртуальном сервере сайта.

3. Какие файлы будут на нашем сайте и каково их назначение?

4. Воспроизведите форму для ввода заказа на автозапчасти.

5. Опишите синтаксис оператора вывода в PHP.

6. Как определяются константы в PHP?

7. Опишите синтаксис условного оператора в PHP.

8. Опишите метод POST для передачи информации PHP-про- грамме.

9. Опишите метод GET для передачи информации PHP-про- грамме.

10. Объясните назначение системы Денвер.

11. Объясните назначение файла c:\windows\system32\drivers\ etc\hosts.

12. Воспроизведите порядок создания сайта autoparts.

ЛАБОРАТОРНЫЕ РАБОТЫ

Лабораторная работа № 1

Наши рекомендации