Категории: PHP

Администрирование сайта. Backup базы данных с помощью PHP скрипта и ограничения хостинга

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

Логотип для backup базы данных
Недавно я столкнулся с небольшой проблемой. Нужно было организовать автоматическое создание резервных копий базы данных.

Задача, конечно, стандартная, а, учитывая объем базы (меньше 1МБ), может быть решена без специального софта и оборудования.

Так что я выбрал самый простой способ (осуществляется в три этапа):

1) создание дампа БД;
2) упаковка дампа в архив;
3) отправка архива на eMail.

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

Т.е. все, что нужно сделать – написать скрипт и запускать его с помощью cron.

Скрипт я решил сделать на PHP, и сразу же столкнулся с проблемой.
Читать дальше

Ускоряем разработку. Шаблоны для Eclipse

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

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

Одной из таких возможностей является автодополнение кода. На сегодняшний день она реализована во многих редакторах, а в IDE стала стандартом де-факто.

Принцип работы этой функции простой. Набираете часть слова, нажимаете Ctrl+Space (может быть другое сочетание клавиш) и появляется список с возможными вариантами автодополнения.

Обычно самые распространенные шаблоны уже установлены в редакторе, но максимальный эффект можно получить если добавить к ним свои собственные.

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

Этот набор я создавал для быстрой вставки комментариев в php код (используется формат phpDocumentor).

Скачать xml файл с шаблонами comments_templates.xml
Читать дальше

Как реализовать асинхронную загрузку файлов с помощью JavaScript и PHP

Владимир | | CodeIgniter, HTML, JavaScript, PHP.

Логотип к статье Асинхронная загрузка файлов

В комментариях к одной из предыдущих статей меня попросили показать пример загрузки файлов на север с помощью технологии AJAX и фреймворка CodeIgniter.

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

Механизм отправки

Прежде всего, нужно четко понимать, что отправить (загрузить) на сервер файл с помощью AJAX нельзя.

Тем не менее, можно организовать процесс загрузки так, что с точки зрения посетителя загрузка будет выглядеть асинхронной. Т.е. посетитель укажет имя файла и нажмет кнопку «Загрузить». После этого, увидит умную надпись вроде «Подождите, идет загрузка…» или какую-нибудь анимацию. А после окончания загрузки – сообщение с результатами. Страница, которую он видит, перезагружена не будет.

Но при этом отправка файла будет выполнена обычным способом.

Идея заключается в использовании невидимого фрейма (iframe), атрибута формы target и JavaScript.
Читать дальше

Web разработка. Автоматическое создание методов на PHP

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

Заставка к статье Автоматическое создание методов на PHP

Если вы занимались объектно-ориентированным программированием, то, безусловно, знаете, что в реальных приложениях количество методов классов может быть довольно большим. Причем во многих из этих методов код попросту повторяется.

Типичный пример – методы установки и чтения свойств (или, если использовать английскую терминологию, getters and setters). Названия этих методов обычно совпадают с названиями свойств класса, только к ним добавляется приставка get или set.

Примечание. Свойства и методы класса – это переменные и функции, объявленные в нем.

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

Теперь представьте, что вы пишите класс, который должен хранить данные одной записи из таблицы в базе данных. А в этой таблице 20 полей. Т.е. нужно написать 40 методов. Они, конечно, простые, тем не менее, каждый все равно должен быть протестирован, а это приличный кусок работы.

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

Идея заключается в использовании метода __call(). Если этот метод объявлен в классе, то вызовы всех несуществующих методов будут переданы ему. Первый параметр __call будет содержать имя вызванного метода, а второй – массив с переданными параметрами.

Рассмотрим небольшой пример. Допустим, у нас есть класс.
Читать дальше

PHP framework CodeIgniter. Управление внутренней адресацией

Владимир | | CodeIgniter, htaccess, PHP.

CI router
В этой заметке я покажу, как использовать встроенный роутер CodeIgniter'а для решения одной несложной задачи.

Прежде всего, пару слов о том, что это такое и зачем нужно.

Как вы, наверное, знаете CodeIgniter – это php фреймворк, одними из основных достоинств которого являются простота использования и низкая ресурсоемкость. Тем не менее, его возможности практически не уступают более «тяжелым» аналогам.

Одной из таких возможностей и является роутер. Он позволяет с помощью несложных правил настроить внутреннюю адресацию сайта по своему вкусу.

Любой запрос браузера передается роутеру, а уже потом – контроллеру. Таким образом, можно изменить любой из параметров запроса. Например, перенаправить запрос другому контроллеру или добавить/удалить параметры.

Делается это достаточно просто. В файле /application/config/routes.php нужно задать правила в виде:

$route[‘выражение’] = "новый_адрес";

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

Теперь переходим к нашей задаче.
Читать дальше

PHP framework CodeIgniter. Авторизация посетителей и ограничение доступа

Владимир | | CodeIgniter, PHP.

Авторизация посетителей

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

Прежде всего, вкратце обрисую сложившуюся ситуацию.

Большинство web ресурсов используют для защиты пару «имя — пароль». Это не самый безопасный вариант, но зато удобный (простой) в использовании.

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

Об аппаратной защите (вроде биометрических датчиков и т.п.) и говорить не приходиться. Эти устройства стоят денег и, зачастую, немаленьких.

Поэтому, метод авторизации с помощью имени и пароля, похоже, останется самым распространенным в обозримом будущем.

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

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

CodeIgniter + AJAX. Проверка данных форм без перезагрузки страниц

Владимир | | Ajax, CodeIgniter, PHP.

Проверка данных форм (Ajax)
В прошлой статье речь шла о проверке данных форм с помощью стандартной библиотеки фрэймворка CodeIgniter. Мы рассмотрели основные возможности библиотеки, создали страницу с формой и написали необходимый для ее проверки код.

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

Давайте немного порассуждаем. Чем отличается ajax запрос от обычного запроса?

1) Ajax запрос можно выполнить только с помощью JavaScript.

2) Ответом сервера на обычный запрос должна быть html страница, а на ajax запрос – фрагмент данных (с разметкой или без нее).

Отсюда вывод. Чтобы добавить поддержку ajax нужно в клиентской части написать JavaScript функцию, которая прочтет данные из формы, отправит запрос и обработает ответ сервера, а в серверной части – изменить возвращаемые значения.

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

Переходим к нашему примеру. Как вы помните, в прошлый раз мы создали форму с тремя полями для ввода личных данных пользователя (ник, полное имя, адрес email).

В этот раз мы используем эту же форму, только немного изменим html разметку.
Читать дальше

PHP framework CodeIgniter. Проверка данных из форм

Владимир | | CodeIgniter, PHP.

Проверка данных форм

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

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

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

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

Естественно, доступ к обеим страницам осуществляется через контроллер, а их адреса выглядят так: www.site.com/index.php/main/index и www.site.com/index.php/main/userform.

Примечание. Подробнее почитать о навигации в CodeIgniter можно в статье «CodeIgniter: контроллер и представления».
Т.е. на данном этапе контроллер выглядит так:
Читать дальше

PHP framework CodeIgniter. Создание многоязычных сайтов

Владимир | | CodeIgniter, PHP.

Локализация сайта
В этой статье речь пойдет о возможностях, которые предоставляет CodeIgniter для поддержки многоязычных сайтов.

Разберемся, как реализована поддержка языков.

Идея очень простая. Вы определяете, какие фразы должны быть переведены и создаете файлы с переводами.

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

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

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

Создание файлов переводов

Т.к. CodeIgniter это PHP фрэймворк, то и файлы с переводами представляют собой обычные PHP скрипты, в которых объявлены массивы строк. Имена этих файлов должны обязательно содержать окончание «_lang.php».
Читать дальше

Как защитить свой web ресурс. Примеры безопасных PHP скриптов.

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

Защита web ресурса
Данные, полученные от посетителя сайта, нужно проверять. Это знают все, это постоянно повторяют во всех руководствах по программированию. Но в большинстве случаев сразу после проверки возникает вопрос: «А что делать, если данные не прошли проверку? Вывести сообщение об ошибке? Попытаться их исправить?».

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

Но, прежде всего, разберемся, какие типы некорректных данных мы можем получить от пользователя. Их всего два:
1) случайные ошибки;
2) специально сформированные запросы для взлома сайта.

В первом случае нужно объяснить посетителю, как исправить ошибку. Т.е. отправить его на страницу с инструкцией (или показать текст около поля ввода).

Второй случай немного сложнее. Тут главное помнить одно простое правило: «Никогда не доверяй данным, полученным от браузера». И не важно, выполняется ли проверка с помощью JavaScript или нет, имея минимальные знания программирования можно сформировать и отправить любой запрос. Отсюда вывод – все данные должны быть проверены на стороне сервера.

На сегодняшний день наиболее часто применяется два вида атак на сайт. Это SQL Injection и Cross Site Scripting (XSS). Рассмотрим их немного подробнее.
Читать дальше