Главная   Новости   Поиск   
Азбука программиста




Яндекс.Метрика

Yii PHP framework: Поиск ошибок на игровом сайте

Yii PHP framework: Поиск ошибок на игровом сайте

В этой статье мы пристально разглядим некие способности, которые предоставляет нам Yii фреймворк для отладки приложения под призмой мощного интеллекта. Эта статья не претендует на дипломный проект. Здесь рассмотрим только те инструменты, которые используются при разработке игрового веб-сайта с флеш одевалками Барби

Включаем режим отладки

Для этого во входном скрипте (файл index.php, который находится в корневой папки веб-сайта) константе YII_DEBUG должно быть присвоено значение true.

defined('YII_DEBUG') or define('YII_DEBUG',true);

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

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

Журналирование ошибок

Здесь все опции производятся в конфигурационном файле (protected/config/main.php). Фреймворк предлагает несколько вариантов ведения лога. Это запись в файл, вывод на экран, запись в базу данных, отправка по eMail. За ведения лога отвечает компонент приложения CLogRouter. Подключаем и настраиваем его.

'components'=>array( … 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( array(
//выводим лог понизу странички
'class'=>'CWebLogRoute', 'levels'=>'trace, info, profile', ), ), ), … ),

В массиве components необходимо сделать элемент под заглавием log и присвоить ему массив с опциями. В элементе class указываем заглавие класса, который отвечает за работу компонента. В нашем случае это CLogRouter.

Потом настраиваем маршрутизацию (routes). Конкретно тут мы определяем куда какие сообщения будут выведены. В этом случае применен класс CWebLogRoute это значит, что лог будет добавлен понизу странички веб-сайта.

Параметр levels определяет, что будут выведены сообщения имеющие уровень trace, info либо profile. Всего существует 5 уровней сообщений: trace, info, profile, warning, error. И с помощью их можно отфильтровать ненадобную на этот момент информацию.

При переносе на рабочий сервер эти опции стоит поменять. К примеру, можно использовать классы CFileLogRoute и CEmailLogRoute для записи сообщений в файл и одновременной отправки по eMail. Но во время отладки, мне удобнее просто прокрутить страничку и поглядеть сообщения, чем лезть в файл.

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

Yii::log($message, $level, $category);
Yii::trace($message, $category);

Способ trace работает исключительно в режиме отладки. В параметре $message необходимо указать текст сообщения, $level – уровень, $category – категория к которой относится сообщение (по-умолчанию равна application, но вы сможете указать строчку в формате xxx.yyy.zzz, к примеру, system.web.CController, в итоге сообщение будет добавляться в лог CController).

В данном примере в нижней части странички появится таблица с системными сообщениями. Вы можете ознакомиться какие составляющие и в каком порядке создавались при формировании странички.

Отладка запросов к БД

В состав Yii фреймворка заходит библиотека для работы с базой данных. Все же, полезно знать какие конкретно SQL запросы она сформировывает. В особенности, если у вас нет подготовительного опыта работы с ней. Для того, чтоб включить вывод запросов в лог, нужно указать параметр 'enableParamLogging'=>true в настройках базы.

'db'=>array( … 'enableParamLogging'=>true, 'enableProfiling'=>true, … ),

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

Для того, чтоб вывести результаты профайлинга открываем макет странички (protected/views/layouts/main.php) и добавляем в хвостовик пару строчек

$dbStats = Yii::app()->db->getStats();
echo 'Выполнено запросов: '.$dbStats[0].' (за '.round($dbStats[1], 5).' сек)';

Получим массив в первом элементе которого хранится полное количество запросов, а во 2-м – время их выполнения.

Выводим информацию об использовании ресурсов

Эти данные мы тоже выведем в футере странички

$memory = round(Yii::getLogger()->memoryUsage/1024/1024, 3);
$time = round(Yii::getLogger()->executionTime, 3);
echo '
Применено памяти: '.$memory.' МБ
'; echo 'Время выполнения: '.$time.' с
';

Для получения этой информации используем класс CLogger. Он содержит два подходящих нам способа:

  • memoryUsage (возвращает объём использованной памяти, в б)
  • executionTime – время сотворения странички



Безопасность

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

Читать далее