Использование нескольких баз данных в 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, но в тоже время позволяют сделать работу более комфортной.
Читать дальше

Вероятно Google сошел с ума :-)

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

Буквально только что (31 января 2009г. 16:50) видел интересный глюк в поисковике Google.

Все сайты в выдаче отмечались как потенциально опасные, т.е. под основной ссылкой появлялась строка «Этот сайт может нанести вред Вашему компьютеру».

Специально сделал скриншот, чтобы запечатлеть этот исторический момент 🙂

google_crazy

Стрелками я выделил предупреждения Google.

Обратите внимание, в выдаче есть ссылки на на официальные сайты кодекса WordPress и Zend'а. Их я решил проверить и увидел очень интересную картинку.
Читать дальше

Оптимизируем WordPress

Владимир | | WordPress.

Наверное, ни для одного блоггера не секрет, что в новых версиях WordPress появилось несколько довольно спорных нововведений.

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

Поэтому появление плагинов, которые позволяют с этим бороться вряд ли кого-то удивит.

О таком плагине сегодня и пойдет речь. Называется он WP-Optimize и позволяет:

— удалить ревизии постов;

— удалить спамерские комментарии, т.е. те, которые в базе данных уже отмечены как spam;

— удалить комментарии, которые не прошли модерацию;

— оптимизировать базу данных;

— изменить имя администратора. Эту возможность, на мой взгляд, нужно было давно встроить в движок.
Читать дальше

Неожиданное поведение Eclipse

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

Недавно я столкнулся с проблемой. Даже не проблемой, а просто нюансом в работе Eclipse. Но именно из-за таких «нюансов» эта IDE сбивает «с толку» новичков, да и не только их. Я даже где-то читал мнение, что Eclipse неустойчиво работает при количестве файлов в проекте больше 100 🙂

Итак, проблема была следующая.

Создаю статический web проект (Static Web Project). Он появляется в общем списке проектов, но не разворачивается. Я аж растерялся 🙂 Несмотря на то, что не первый год работаю с этой IDE раньше такого не видел.

Смотрю в проводнике. Папка проекта создана, вроде все правильно…

Перезапускаю IDE, нулевой эффект.
Читать дальше

Изменяем файлы с помощью Phing

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

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

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

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

Затем вы находите ошибку (или просто решаете что-то изменить) и процесс повторяется заново.

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

В этой статье я покажу небольшой пример как с помощью Phing можно автоматизировать такие операции.

Примечание. Почитать о том что такое Phing и зачем нужен можно здесь.

Прежде всего, сформулируем задачу.
Читать дальше

Отмечаем место нахождения посетителя на Яндекс.Карте

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

Эта статья о совместном использовании двух web сервисов: IPLoc и Яндекс.Карты.

Прежде всего, разберемся зачем нужны одновременно два сервиса.

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

Сервис IPLoc, в свою очередь, позволяет определить географические координаты указанного IP адреса, т.е. широту и долготу. А это как раз те данные, которые нужны чтобы указать точку на Яндекс.Карте.

Примечание. Вместо Яндекс.Карт можно использовать Google Maps, о которых я уже рассказывал. В этот раз я выбрал Яндекс.Карты потому что они содержат более подробные карты с названиями улиц для городов СНГ.

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

Принцип работы.
Читать дальше

RSS лента переехала

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

Приветствую всех читателей!

И надеюсь, что вы сможете прочитать этот текст не только на странице сайта, но и в ваших RSS ридерах 🙂

Предыдущая фраза — это, конечно, шутка, но мало ли…

Теперь обо всем по порядку.

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

Естественно, можно и не переносить, а ограничится встроенными в движок блога возможностями. Но к преимуществам FeedBurner'а все уже привыкли и отказываться от них не хочется.

Честно говоря, неоднозначное у меня отношение к этому переносу. С одной стороны FeedBurner — сервис бесплатный и услуга предоставляется «as is» («как есть»). Но с другой — требования Google сильно смахивают на ультиматум, а это не очень приятно.

Итак, последовательность действий.

1) Заходим в свой аккаунт FeedBurner и видим сверху страницы надпись на желтом фоне с предложением перенести ленту.

2) Нажимаем на соответствующую ссылку, нам предлагают выбрать аккаунт Google на который мы будем переносить ленту.

3) Подтверждаем перенос и ждем письма с отчетом. В моём случае операция заняла минут 5-10.

4) Обновляем все ссылки на RSS ленту. Принцип следующий.

Старая ссылка выглядела так:
http://feeds.feedburner.com/simplecoding

Новая:
http://feeds2.feedburner.com/simplecoding

Т.е. feeds заменили на feeds2.

Как изменять ссылки — вопрос отдельный. Если вы прописали их прямо в шаблоне, то придется исправлять шаблон. Если использовали плагин — изменяете адрес в настройках плагина.

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

Статистика
Читать дальше

Закрываем доступ к сайту с помощью .htaccess и PHP

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

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

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

Решение, которое я тогда предложил, работоспособное и им вполне можно пользоваться. Но только какое-то оно сложное 🙂

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

И, самое главное. Как абсолютно верно заметил Олег Лобач в комментариях к тому посту, если сайт закрыт на обслуживание, то необходимо отправлять заголовок с 503 кодом (Service Unavailable).

Для посетителей этот код роли не играет, они все равно увидят страницу с описанием ошибки, но вот поисковые боты – другое дело. Думаю, никому не захочется, чтобы в индекс поисковика попала фраза «Зайдите позже» вместо контента блога.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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