Категории: CodeIgniter

Bug Tracker: изменения в проекте (часть третья)

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

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

В этой статье продолжения рассказа о разработке собственной системы отслеживания ошибок. Предыдущие части вы найдете здесь и здесь.

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

База данных.

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

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

В общем, я решил, что лучше изменить базу данных сейчас, чем морочить себе голову потом 🙂

Новая структура базы данных выглядит следующим образом.
Читать дальше

Bug Tracker: установка фреймворка и создание базы данных (часть вторая)

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

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

Но прежде чем переходить к основной теме, хочу поблагодарить всех комментаторов и особенно AmdY, Big_Shark и Алексея Качаева за советы!

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

В прошлый раз с инструментами мы определились (используем PHP, фреймворк CodeIgniter, MySQL и jQuery).

Сейчас нам нужно их установить и настроить.
Читать дальше

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ограничиваем доступ к файлам на сервере

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

В этой статье я хочу рассказать о нескольких вариантах ограничения доступа к файлам на сервере.

Т.е. мы сделаем так, чтобы посетитель перед загрузкой в обязательном порядке выполнил какие-то действия (например, вводил captcha).

Существует два основных варианта решения задачи.

1) Скачиванием файлов будет управляет PHP скрипт.

2) Скачивание происходит через web сервер, но только в том случае, если у посетителя есть соответствующее разрешение.

Прежде всего, разберем достоинства и недостатки обоих методов.

Первый вариант. Вообще-то единственное его достоинство – это возможность реализации на shared-хостинге.

Зато недостатки очень серьезные. Файл отправляется пользователю через PHP скриты, т.е. работают все ограничения, действующие на них. Например, если для скриптов установлено максимальное время работы 15 сек, то значит, файл должен быть загружен за это время. Тоже самое и с максимально допустимым объемом памяти.

Проще говоря, никаких больших файлов отдавать таким способом не получится.

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

Второй вариант выглядит значительно привлекательнее. Ситуация с достоинствами и недостатками полностью противоположная. Отдавать файлы будет Apache без использования PHP. Но чтобы реализовать проверку посетителей, нужно иметь доступ к конфигу сервера (httpd.conf).

Рассмотрим общий принцип загрузки файла

Читать дальше

Разработка с CodeIgniter: включаем автодополнение кода в Eclipse

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

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

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

В этой статье я расскажу о нескольких способах подключения автодополнения кода для сторонних библиотек. В качестве примера рассмотрим фреймворк CodeIgniter.

Прежде всего, рассмотрим самый простой вариант.
Читать дальше

Подключаем FCKeditor к CodeIgniter

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

FCKeditor, на мой взгляд, один из лучших online редакторов. И в теории его можно подключить практически к любому сайту, независимо от того какой движок/фреймворк/CMS используется.

Но, естественно, всегда существует несколько нюансов, которые немного усложняют жизнь 🙂

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

Дело вот в чем. Плагины и библиотеки (пользовательские) обычно находятся в папке application, которая не обязательно должна находиться внутри DOCUMENT_ROOT. Точнее, с точки зрения безопасности, эту папку лучше убрать за пределы DOCUMENT_ROOT чтобы исключить любую возможность прямого доступа к скриптам сайта (т.е. скрипты будут доступны только через index.php).

Но FCKeditor содержит файлы картинок, стилей и т.п., к которым нужно обеспечить прямой доступ. Т.е. его нужно разместить внутри DOCUMENT_ROOT.

Как оказалось, обойти эту проблему совсем не сложно.
Читать дальше

Генератор форм для новой версии CodeIgniter

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

Думаю, все кто работает с CodeIgniter в курсе – на этой недели вышла его очередная версия (1.7).

Изменения довольно интересные и существенные (на русском здесь). Самое главное — добавлена новая библиотека для проверки форм (Form Validation).

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

То же самое касается и моего генератора форм. Работать со старой версией можно, но код будет совместим только с версиями 1.6 и более ранними.

Т.к. отставать от развития не правильно, я написал новую версию генератора.
Читать дальше

Генератор форм для CodeIgniter

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

Создание форм – достаточно рутинная задача. Процесс подробно описан в документации, но можно легко сделать множество механических ошибок. Например, имена и id полей формы нужно указывать несколько раз — в контроллере и представлении.

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

Естественно, что даже частичная автоматизация процесса может значительно сэкономить ваше время.

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

Поэтому я написал небольшой генератор форм для CodeIgniter.
Читать дальше

Кэширование части страницы в CodeIgniter

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

CodeIgniter имеет встроенную библиотеку кэширования страниц. Но она работает только с целыми страницами, т.е. вы не можете кэшировать часть страницы.

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

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

Специально для таких случаев я написал небольшую библиотеку (ссылка на архив с ней находится внизу страницы).
Читать дальше