PHP5_nachinayushim
.pdfУчебный пример: диспетчер протоколирования на 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§ion=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.
Учебный пример: диспетчер протоколирования на 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]; ?>
Ответы 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+сайтом.