Архивы за месяц: февраля 2009

Создаем собственную систему отслеживания ошибок на PHP

Владимир | | Ajax, CodeIgniter, JavaScript, MySQL, PHP, Web разработка.

Приветствую всех!

Это первая статья о создании полнофункционального web приложения, которое будет представлять собой систему отслеживания ошибок (bug tracking system).

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

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

Почему именно баг трекер?

Очень хороший вопрос 🙂 Вообще-то, причин две.

Первая – это приложение не «hello world». И на его примере можно показать совместное использование PHP, JavaScript, AJAX, работу с базой данных и т.д.

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

Постановка задачи.
Читать дальше

Вопросы и ответы или как правильно организовать информацию

Владимир | | Разное.

Написать этот пост меня подтолкнул недавно открывшийся сервис ASKDEV.ru. В общем-то, ничего принципиального нового в нём нет, но, как мне кажется, такие ресурсы имеют очень серьезные перспективы развития. И для того, чтобы пояснить свою точку зрения, расскажу о всем известной проблеме 😉

Все мы знаем, что интернет быстро развивается, появляются интересные ресурсы с огромным количеством полезной информации. Все прекрасно 🙂

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

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

Классический пример – проблемы с кодировками в web приложениях. На любом форуме соответствующей тематики можно легко найти несколько таких тем. И однотипные ответы: проверьте настройки сервера, базы данных, кодировки файлов и т.д.

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

В общем, нужно чтобы кто-то оценивал ответы. А кроме самих посетителей ресурса это делать никто не будет.
Читать дальше

XSS с использованием JSONP и jQuery

Владимир | | Ajax, JavaScript, PHP, Web разработка.

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

Как несложно догадаться, JSONP представляет собой расширение формата JSON. Расшифровывается эта аббревиатура так — JavaScript Object Notation with Padding, т.е. JSON с дополнением.

Об этом дополнении чуть ниже, а сейчас, напомню, что представляет собой формат JSON и зачем он нужен.

Если не вникать в нюансы, JSON представляет собой формат записи JavaScript объектов в виде обычной текстовой строки. Т.е. вы можете отправить такую строку в ответ на AJAX запрос, а затем преобразовать её на стороне клиента в объект с данными.

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

XSS и Same Origin Policy

Владимир | | Ajax, HTML, JavaScript, Web разработка.

Прошлый пост «Как обойти запрет на XSS» вызвал довольно интересное обсуждение. Я сначала пробовал сразу отвечать на комментарии, но потом понял, что развернутые ответы больше напоминают статьи, а краткие – только всё запутывают.

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

В общем, я провел небольшую серию экспериментов и хочу рассказать о результатах.

На всяких случай напомню, что в прошлый раз речь шла об использовании XSS (cross site scripting), т.е. межсайтовых запросах.

В первую очередь я решил проверить, как работают самые простые запросы. Для этого создал простенькую тестовую страничку на локальном сервере (localhost) и подключил библиотеку jQuery.
Читать дальше

Как обойти запрет на XSS

Владимир | | Ajax, htaccess, HTML, PHP, Web разработка.

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

Приведу небольшой пример. Недавно я рассказывал об использовании Яндекс.Карт и сервиса IPLoc.

Для получения данных от IPLoc пришлось использовать PHP, хотя, как совершенно справедливо заметил Big_Shark, было бы гораздо удобнее отправить этот запрос с помощью JavaScript. Но кросс-доменный JavaScript запрещен политиками безопасности браузеров.

Тем не менее, мне стало интересно, можно ли обойти это ограничения без использования серверных скриптов (PHP). И решение, конечно, нашлось 😉 Правда, оно имеет свои недостатки, но об этом чуть ниже.
Читать дальше

PHP: создаем собственный сервис геотаргетинга

Владимир | | HTML, MySQL, PHP, Web разработка.

Некоторое время назад я рассказывал об использовании Яндекс.Карт и сервиса IPLoc, который позволяет определить географические координаты посетителя по его IP адресу.

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

Конечно, проблемы бывают у всех. Но если не работает собственный ресурс, можно попытаться что-то сделать, а тут остается только ждать.

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

В общем, глядя на сложившуюся ситуацию, я начал искать локальную альтернативу IPLoc, т.е. готовую базу данных. Т.к. платные варианты меня не устраивали, то искать пришлось довольно долго 🙂

В результате я остановился на сервисе WIPmania.com. Он предоставляет и API для получения данных, и базу данных.
Читать дальше

Использование нескольких баз данных в CodeIgniter

Владимир | | CodeIgniter, PHP, Web разработка.

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

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

Т.е. вызвать два раза функцию mysql_connect (если, конечно, используете MySQL).

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

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

Я расскажу о подключении и использовании нескольких баз данных в CodeIgniter. Но, естественно, это не единственный фреймворк, который имеет встроенные библиотеки для работы с несколькими БД. Например, недавно я читал статью «Работа с несколькими базами данных при помощи ORM в Zend Framework».

В качестве примера рассмотрим подключение к двум БД.
Читать дальше

Настройка профайлинга в xdebug для работы с отдельным web приложением

Владимир | | PHP, Web разработка.

Сегодня я хочу продолжить тему профайлинга (profiling) web приложений с помощью XDebug.

Как известно, этот отладчик позволяет изучать производительность PHP скриптов. Такая операция называется профайлинг. В этом режиме XDebug после каждого выполнения PHP скрипта создает текстовый файл с данными о вызванных функциях и времени их выполнения.

Естественно, анализировать вручную такие файлы очень неудобно. Лучше использовать специальные инструменты.

Наиболее распространенным является KCacheGrind (под Linux) и WinCacheGrind (аналог для Windows). Но есть и web приложение для анализа этих файлов. Называется Webgrind.

Раньше я о нем немного рассказывал, но в той статье упустил несколько моментов, которые напрямую не относятся к Webgrind, но в тоже время позволяют сделать работу более комфортной.
Читать дальше