• Как написать свой фреймворк на php. Обработка ошибок. Урок 4

    Обработка ошибок в php, это весьма занятная вещь. С одной стороны, в этом языке есть все, чтобы обработать и вывести ошибку. С другой, в нем есть такой тип ошибок, который ни коим образом не обрабатывается. Это Fatal Error, или ошибки синтаксиса. 

    Ошибки таких типов не попадают в обработчики, они просто выводятся как есть. 

    Дисклеймер

    Код ниже, без тени сомнения, взят с фреймворка Yii. Цель данного цикла ни в том чтобы написать свой велосипед, а в том чтобы знать, как этот велосипед в принципе устроен.

    Итак, в прошлых уроках мы создали макет приложения, пару страниц, роутер и шаблонизатор. Мы даже объявили такой класс

    class Except extends Exception{}

    который ничего не делает. Зайду немного вперед, он и сейчас ничего не будет делать. Но мы поймем зачем он в принципе будет нужен в дальнейшем.

    Когда в коде мы обрабатывали какую-то бизнес логику, мы выкидывали исключение, таким кодом

    throw new Except('Error message');

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

    вывод ошибок в Ideal фреймворк до версии 1.0.2

    Fatal error: Uncaught exception 'Except' with message 'File Z:\home\analize\ideal/application/views/page/pages/B2.php not found' in Z:\home\analize\ideal\ideal\classes\Controller.php:29 Stack trace: #0 Z:\home\analize\ideal\ideal\classes\Controller.php(43): Controller->_renderPartial('Z:\home\analize...', Array, true) #1 Z:\home\analize\ideal\application\views\page\read.php(2): Controller->renderPartial('pages/B2') #2 Z:\home\analize\ideal\ideal\classes\Controller.php(26): include('Z:\home\analize...') #3 Z:\home\analize\ideal\ideal\classes\Controller.php(43): Controller->_renderPartial('Z:\home\analize...', Array, true) #4 Z:\home\analize\ideal\ideal\classes\Controller.php(53): Controller->renderPartial('read', Array, true) #5 Z:\home\analize\ideal\application\controllers\PageController.php(4): Controller->render('read', Array) #6 [internal function]: PageController->actionRead('B2') #7 Z:\home\analize\ideal\ideal\classes\Controller.php(7): call_user_func_array(Array, Array) #8 Z:\home\analize\ideal\ideal\classes\App.php in Z:\home\analize\ideal\ideal\classes\Controller.php on line 29

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

    Для того, чтобы сделать это более удобоваримым, нам потребуется установить обработчик исключений, через метод set_exception_handler. Мы обрабатываем не только исключения, но и ошибки php (все, кроме fatal), поэтому установим еще обработчик set_error_handler.

  • Не работает Denwer на Windows 8

    Денвер запускается, а вот phpmyadmin уже не открывается в windows 8. Что только я не пробовал: запускал все файлы в режиме совместимости с windows 7, с правами админа, переустанавливал denwer, качал новые компаненты системы. Ничего не помогало. Оказалось, что решение довольно простое.

  • Работа с файлами в JavaScript, Часть 3:Событие прогресса и ошибки

    Объект FileReader используется для чтения данных из файлов, которые доступны через браузер. В моей предыдущей статье вы узнали, как используя объект FileReader читать данные из файла в различных форматах. FileReader во многом очень похож на XMLHttpRequest.

    Событие прогресса (Progress events)

    События показывающее прогресс какого-либо процесса очень распространены. Эти события спроектированы для отображения прогресса передачи данных. Такая передача происходит как при запросе данных с сервера, так и при запросе данных с диска, что FileReader и делает.

    Есть шесть событий прогресса: