Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

PHP5_nachinayushim

.pdf
Скачиваний:
29
Добавлен:
20.03.2015
Размер:
26.79 Mб
Скачать

Учебный пример: диспетчер протоколирования на PHP 683

Работа с диспетчером протоколирования

Наконец, диспетчер протоколирования готов. Для удобства использования в при+ ложении имеется индексная страница, с которой можно инициализировать базу дан+ ных, запускать все тесты, записывать информацию в базу данных и просматривать от+ четы. Однако прежде чем использовать приложение, необходимо рассмотреть один файл, который связывает все приложение в единое целое: userlog.php.

userlog.php

Сценарий userlog.php отвечает за непосредственный сбор данных запроса. Он принимает строку запроса и создает новый UserLog+объект, который затем записы+ вается в базу данных ++++++ при условии, что информация, переданная в URL, проходит функции проверки данных. Все это делается в блоке try-catch, который использу+ ется для генерирования одного из исключений MultiLogExceptions() в случае возникновения каких+либо ошибок:

<?

require_once ("settings.php"); require_once ("lib/class.UserLog.php");

try {

$ul = new UserLog ($_REQUEST); $ul->persist();

} catch (MultiLogException $e) {

print $e->getErrorMessage();

print "<h3>Информация phpinfo:</h3>"; phpinfo(); // небезопасно

}

?>

Каждый сайт может передавать информацию с помощью URL+строки:

http://logging_site/userlog.php?site=101&section=1&login=user101&sessionid =1E23553&firstname=Alice&lastname=AppleGate&address1=123Main&city =Sandusky&state=OH&zip=44870

Для обработки данных можно использовать методы, а поскольку необходимо сохра+ нить данные (т.е. записать их в базу), следует вызвать для этих данных метод persist().

Просмотр интерфейса диспетчера протоколирования

Откройте в Web+браузере индексную страницу диспетчера протоколирования (рис. 17.8).

После щелчка по ссылке Инициализация базы данных на странице отобразится сообщение Готово (при успешном выполнении). Выше уже описывались результаты запуска трех тестов, поэтому нет необходимости проверять эти ссылки снова. Щелк+ ните по ссылке Отправка журналов.

В результате на странице отобразится полная распечатка двух UserLog+объектов, UserDemographic+объектов и ссылка для просмотра отчетов (подтверждающая, что эти объекты были записаны в базу данных), как показано на рис. 17.9.

684 Глава 17

Рис. 17.8.

Рис. 17.9.

Учебный пример: диспетчер протоколирования на PHP 685

Щелкните по ссылке Просмотр отчетов. Выберите даты, сайт и разделы, для ко+ торых необходимо просмотреть отчеты. На рис. 17.10 показан пример.

Рис. 17.10.

Результаты должны выглядеть аналогично рис. 17.11.

Рис. 17.11.

686 Глава 17

Можно убедиться, что собранная информация записывается в базу данных. Моди+ фицируйте URL, упомянутый в ‘‘userlog.php’’, так, чтобы он отражал некоторую персо+ нальную информацию, и передайте его в браузер. Например:

http://logging_site/userlog.php?site=100&section=1&login=user101&sessionid =2D56553&firstname=David&lastname=Mercer&address1=65SomePlace&city =CapeTown&state=WP&zip=8001

В случае успеха должно появиться краткое подтверждение (рис. 17.12).

Рис. 17.12.

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

Рис. 17.13.

Учебный пример: диспетчер протоколирования на PHP 687

Это все. Теперь можно записывать запросы к диспетчеру протоколирования от различных сайтов, с которых необходимо собирать информацию. Естественно, это приложение можно модифицировать, чтобы:

получать данные разных типов, а не только демографические;

отображать более сложные отчеты;

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

Резюме

Вотличие от остальных глав данной книги, в каждой из которых освещался один аспект PHP+программирования, в этой главе подробно рассмотрено завершенное приложение. Читатель познакомился с различными проблемами, которые приходит+ ся решать во время создания более сложных приложений. В этой главе представлены многочисленные практические приемы программирования и объектно+ориентиро+ ванный подход, при этом акцент делается на эффективные методики проверки дос+ товерности данных и обработки исключений.

Входе анализа учебного примера рассматривался полный цикл разработки при+ ложения, диспетчера протоколирования. Здесь были представлены новые техноло+ гии, которые впоследствии разработчик может использовать для усовершенствования своих программ. В частности, в главе рассматривалась система Smarty, позволяющая выделить в приложении уровень представления, а также пакет PHPUnit, обеспечи+ вающий блочное тестирование.

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

Досконально изучив эту главу, вы сможете работать уже над более сложными про+ ектами. Конечно, кривая изучения никогда не заканчивается (а часто становится кру+ че), но работа будет интересной, а награда достойной.

A

Ответы

Упражнения, представленные в этой книге, способствуют закреплению новых знаний и усовершенствованию полученных навыков. Это приложение содержит ре+ шения упражнений по главам. Фрагменты кода вы найдете здесь либо сможете загру+ зить с сайта www.wrox.com. Представленный здесь код также доступен на этом сайте.

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

Глава 1

Упражнение

Предлагаемое упражнение будет полезным всякий раз при установке или работе с PHP на новой платформе.

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

Каковы аппаратные возможности компьютера, на котором работает PHP? Опишите процессор, жесткий диск, оперативную память и т.д., а также любые предполагаемые ограничения.

Какая операционная система работает на данном оборудовании? Укажите вер+ сию, а также все текущие заплаты и известные дефекты.

Какой Web+сервер работает на данной машине? Укажите версию, заплаты и из+ вестные дефекты. Кроме того, опишите конфигурацию Web+сервера, корневой

Ответы 689

каталог, то, как PHP настраивается для работы с сервером, а также права досту+ па, которые пришлось установить.

Какая версия PHP была установлена? Укажите версию, установленные файлы, каталоги, в которые они были установлены, а также все параметры реестра, на+ строенные или созданные для поддержки инсталляции PHP.

Какие конфигурационные установки были заданы или изменены (по сравне+ нию со стандартными) для установки PHP? Перечислите их.

Какие расширения были включены? Перечислите их все, а также укажите при+ чины, по которым вы их включили.

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

Решение

Создайте для своей системы новый документ, в котором будут содержаться сле+ дующие сведения:

Документация — Сервер01

Процессор – жесткий диск – оперативная

Pentium 4, 1,7 ГГц – 120 Гб – 512 Мб

память

 

Операционная система

Red Hat Linux Fedora

Web-сервер

Apache 2.0

Интерпретатор сценариев

PHP 5.0

Конфигурационные параметры PHP

register_globals = off,

 

стандартные настройки для разработки сценариев

Глава 2

Упражнение 1

1.Создайте PHP+программу, которая трансформирует первое предложение во второе, и выводит результат. Оба предложения представлены ниже:

A. Теперь пора всем хорошим людям прийти на помощь стране.

Б. Пора теперь стране прийти на помощь всем хорошим людям.

Решение

Напишите такой PHP+сценарий:

<?php

$my_array = explode(" ","теперь пора всем хорошим людям прийти на помощь стране"); echo $my_array[1] . " " . $my_array[0] . " " . $my_array[8] . " " . $my_array[5] . " " . $my_array[6] . " " . $my_array[7] . " " . $my_array[2]

. " " . $my_array[3] . " " . $my_array[4]; ?>

690 Приложение А

Упражнение 2

1.Напишите PHP+программу, которая создает два массива чисел и прибавляет значения одного массива к соответствующим (по индексу) значениям другого массива. Массивы должны содержать следующие значения:

A. 2, 4, 6, 8, 10;

Б. 3, 5, 7, 9, 11.

Решение

Напишите такой PHP+сценарий:

<?

$arr01 = array(2,4,6,8,10); $arr02 = array(3,5,7,9,11);

for ($counter = 0; $counter <= 4; $counter ++){

$arr03[] = $arr01[$counter] + $arr02[$counter]; echo "Ответ " . "$arr03[$counter]" . "<br>";

}

?>

Глава 3

Упражнение

В PHP имеется очень полезная функция isset(), которая сообщает PHP+ программе, установлена ли определенная переменная. Например, предположим, что существует страница с формой, содержащей submit+кнопки login и logout. С по+ мощью функции isset() можно узнать, какая кнопка была нажата:

if (isset($login)) { //делаем что-то

} elseif (isset($logout)) { //делаем что-то другое

}

В этом упражнении требуется создать Web+страницу с формой, которая отправляет данные самой себе, и заставить PHP+программу сообщать об отправке формы, ис+ пользуя функцию isset(). Если форма не была отправлена, то программа должна отобразить форму (без сообщения), запрашивающую имя и фамилию пользователя. Иначе программа должна вместо формы отобразить сообщение (короткое предложе+ ние, например: ‘‘Ваше имя XX, а фамилия YY’’).

Совет: чтобы определить, была ли отправлена форма, следует использовать скрытое поле, а для того чтобы заставить форму отправлять данные самой себе, можно использовать переменную $PHP_SELF.

Решение

<html><head><title>Заголовок страницы</title></head> <body>

<?php

if (isset($_POST['posted'])) {

echo "Спасибо. Ваше имя - $_POST[first_name], фамилия $_POST[last_name]"; } else {

?>

Ответы 691

<h2>Пожалуйста, заполните форму</h2>

<form method="POST" action="<?php echo "$_SERVER[PHP_SELF]"; ?>"> <input type="hidden" name="posted" value="true">

Имя<input type="text" name="first_name"><br> Фамилия<input type="text" name="last_name"> <input type="submit" value="Отправить информацию">

</form>

<?php

}

?>

</body>

</html>

Глава 4

Упражнение

‘‘У нас есть Web+сайт, но информация на нем устарела. Он выглядит не очень при+ влекательно, но мы уже наняли дизайнера, которой переделает логотип, поэтому как только он закончит свою работу, трафик, вероятно, возрастет. Мы собираемся нани+ мать персонал для поддержки растущих запросов и хотим разместить на сайте про+ грамму для сбора резюме.’’

‘‘Посетители должны легко находить на сайте перечень вакансий, но эта ссылка не должна быть главным элементом страницы. Мы должны предоставить пользователю возможность искать работу и оставлять свою контактную информацию на сайте. Те, кто не имеет высшего образования, могут претендовать только на работу начального уровня в отделе продаж или отделе доставки. Заработные платы ни по одной из ва+ кансий для начала не превышают 20 000 долларов, на руководящих постах предлага+ ются поощрительные премии. Соискатели должны отправлять свои пожелания по за+ работной плате и иметь минимум двухлетний опыт работы. Желающие получить работу на руководящей позиции, в том случае если они не имеют докторской степени, должны иметь, по крайней мере, пятилетний опыт работы. Мы бы хотели, чтобы лю+ ди могли искать на сайте работу и подавать заявки на интересующие их позиции, а также чтобы они могли отправлять свои резюме и получать информацию о том, на какую работу они могут претендовать.’’

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

Выполнение этого упражнения поможет получить практические навыки, вы уз+ наете о том, как, начиная с формулировки проблемы, двигаться к созданию закончен+ ного продукта. Задача в данном случае заключается в том, чтобы изложить требова+ ния заказчика в более четкой форме и использовать возможности PHP для выполнения сбора и обработки информации, а также для выдачи ответа пользовате+ лям данного Web+сайта. Чтобы выполнить упражнение, в дополнение к законченной программе следует включить следующие пункты:

перечень всей необходимой информации в дополнение к уже представленной;

описание Web+страниц, которые вы будете разрабатывать, причины их разра+ ботки (зачем эти страницы нужны) и то, как пользователи будут взаимодейст+ вовать с ними;

краткое описание интеграции созданных страниц с существующим Web+сайтом.

692 Приложение А

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

Задание описано ++++++ можно приступать к проектированию.

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

Решение

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

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

2.Опыт работы.

3.Образование.

4.Специальная информация о квалификации (ученая степень, сертификаты и т.д.).

5.Дополнительная информация.

Втребованиях также описана возможность поиска работы. Из этого следует, что нужно составить список внутренних работ, актуальность которого поддерживается од+ ним из сотрудников организации заказчика. Этот сотрудник должен вводить поисковые фразы (ключевые слова), применимые к каждому виду работ. Также следует уточнить, нужно ли реализовать возможность поиска работы по заданному диапазону зарплаты.

Есть несколько условий, которые касаются поиска работы и отправки резюме. Пер+ вое условие: люди без высшего образования могут претендовать лишь на работу началь+ ного уровня в отделе продаж или доставки. Надо ли давать им возможность начинать поиск работы, прежде чем они ответят на некоторые отборочные вопросы (зачем по+ казывать этим людям список работ, к которым они не могут быть допущены?).

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

Указание зарплаты не требует специального программирования, кроме того, что стоит выводить предупреждение для потенциальных работников о том, что зарплата

вкомпании не очень высокая, хотя менеджеры могут получать премии.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]