Категории: PHP

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

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

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

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

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

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

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

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

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

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

Закрываем доступ к сайту с помощью .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).

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

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

Обработка произвольного количества полей на PHP

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

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

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

Прежде всего немного теории.

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

Т.е. можно в цикле перебрать все элементы массива $_POST и узнать значения всех полей.

На этом можно было бы и остановиться, но на практике часто встречается такая ситуация. Форма содержит несколько обязательных полей и произвольное количество необязательных. Причем обычно необязательные поля содержат однотипные данные (которые и обрабатывать нужно отдельно).

Например. Нам нужна форма с помощью которой пользователь сможет создавать опросы. Т.е. необходимо ввести текст вопроса (обязательное поле) и варианты ответов (их количество может быть любым).
Читать дальше

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

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

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

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

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

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

Как написать задачу для Phing

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

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

В этой статье я покажу пример создания такой задачи.

Примечание. Я предполагаю, что вы хотя бы в общих чертах знакомы с Phing и знаете как его установить и написать простейший build файл. Если нет, советую сначала почитать эти статьи: Программирование на PHP. Избавляемся от рутинных операций с помощью Phing и Использование Phing для сборки web приложений.

Допустим, нам нужно изменять кодировку файлов. На PHP сделать это можно, например, с помощью функции mb_convert_encoding. В качестве параметров она принимает:
— исходный текст;
— нужную кодировку;
— исходную кодировку.
А после выполнения возвращает перекодированный текст.

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

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

С другой стороны, с помощью Phing мы можем запустить несколько операций нажатием одной кнопки. Почему бы не добавить сюда и перекодировку?

Итак, приступим.
Читать дальше

Сравнение PHP IDE

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

Приветствую всех! Тема прошлого поста неожиданно получила развитие 🙂

В прошлый раз Oleg Lobach попросил сделать сравнительную таблицу PHP IDE, а Александр Макаров предложил сделать это совместными усилиями. И не просто предложил, а сделал большую часть работы 🙂

Сам бы я, наверное, браться за такую таблицу не стал, т.к., например, с NetBeans я не работал. Точнее я им раньше пользовался, но только для Java.

В результате совместных усилий получилась

acrobat-reader

Сравнительная таблица основных PHP IDE.

Есть и HTML версия.

В нее вошли:
Читать дальше

Новая среда разработки на PHP

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

Совсем недавно я узнал, что разработчики Aptana Studio выпустили расширение для PHP разработчиков. По большому счету говорить о новой среде разработки не совсем корректно, т.к. и сама Aptana Studio и Aptana PHP Development Environment представляют собой плагины к Eclipse IDE.

Тем не менее, плагин плагину рознь 😉 . И по количеству функций Aptana PHP гораздо ближе к IDE чем к обычному плагину.

Установка и настройка.

Здесь вряд ли у вас возникнут проблемы. Самый простой способ – скачать Aptana Studio. Зайти в меню Help -> Software Updates -> Find and Install… После этого, отмечаете «Search for new features to install» и нажимаете Next.

Тут вы увидите список доступных расширений в котором первым идет Aptana: PHP Development Environment. Отмечаем его и жмем Finish.

Дальше процесс установки ничем не отличается от установки обычного плагина для Eclipse и описывать его я не вижу никакого смысла. Все ваши действия сведутся к подтверждению установки и нажатиям кнопки Next.

Переходим к возможностям.
Читать дальше