Что-то я все чаще стал натыкаться на посты о Ruby On Rails, MVS и разных php-фреймворках. Думаю, пора обратить свое пристальное внимание на эту область веб-разработки.
18.11.2008
CakePHP
Sypex Dumper
Sypex Dumper — это PHP-скрипт, с помощью которого можно просто и быстро создать резервную копию (бекап, дамп) базы данных MySQL, а также восстановить в случае необходимости базу данных из резервной копии.
Sypex Dumper в отличии от многих подобных скриптов не загружает бекап-файл целиком в память, благодаря чему, ему безразличен размер базы данных и он одинаково быстро работает, как с маленькими, так и с большими объемами данных.
Sypex Dumper создан специалистами украинской компании БИНОВАТОР.
Sypex Dumper Lite распространяется по лицензии GNU GPL, т. е. является абсолютно бесплатным.
Облако тегов
Рассмотрим такую задачку как генерация облака тегов. ММы все конечно ни раз встречали это облако на других сайтах и блогах, но не все задумывались над реализацией этого облака на php. Общие моменты ясны из определения с wiki: “визуальное представление списка ярлыков (или категорий). Частота упоминаний, поисков, ссылок в интернете с определенного сайта неких слов, терминов, имен, отображается на специальной странице в виде изображения этих слов в формате гиперссылок. Размер изображения тем больше, чем выше релевантность данного слова (термина, имени).” Релевантность в нашем случае определяется количеством вхождений одного тега в их общую массу. Учитывая все вышесказанное, весь алгоритм построения облака тегов можно разделить на два этапа: Генерация списка пар Тег-Количество вхождений Вывод облака с учетом релевантности тегов Первая задача решается довольно просто с технической точки зрения. Вторая тоже, но здесь возможны вариации. Ниже приведу небольшой класс, который я написал для генерации облака тегов. исходниккопировать в буферпечать? tags = $tags; } private function get_tag_count($tag_name, $tags) { $count = 0; foreach ($tags as $tag) { if ($tag == $tag_name) { $count ; } } return $count; } private function tagscloud($tags) { $tags_list = array(); foreach ($tags as $tag) { $tags_list[$tag] = self::get_tag_count($tag, $tags); } return $tags_list; } private function get_min_count($tags_list) { $min = $tags_list[$this->tags[0]]; foreach ($tags_list as $tag_count) { if ($tag_count < $min) $min = $tag_count; } return $min; } public function get_cloud() { $cloud = Array(); $tags_list = self::tagscloud($this->tags); $min_count = self::get_min_count($tags_list); foreach ($tags_list as $tag=>$count) { $font_steps = $count - $min_count; $font_size = $this->font_size_min $this->font_size_step * $font_steps; $cloud[] = "".$tag.""; } return $cloud; } } ?> Скачать этот класс можно здесь: tagscloud.php, а работать с этим классом примерно так: исходниккопировать в буферпечать? get_cloud(); foreach ($tags_list as $tag) { echo $tag.' '; } ?> В результате работы этого примера в окне браузера Вы получите следующее: Второй этап построения облака тегов (вывод облака) заключается в преобразовании показателя релевантности (кол-во вхождений) в размер шрифта результирующей надписи. В классе я реализовал это следующим образом: в настройках задается минимальный размер шрифта, который соответствует минимальному уровню релевантности (одно вхождение). Все теги с большей релевантностью имеют размер на столько пикселей больше, на сколько больше они имеют вхождений. Шаг изменения можно задавать полем font_size_step, а минимальный размер шрифта полем font_size_min. Для дальнейшего усовершенствования внешнего вида можно прикрутить облако к небольшому js-скрипту. В результате чего получится такое облако: http://nacmnogo.ru/cloud.html. Подробнее про этот скрипт можно почитать здесь http://habrahabr.ru/blogs/javascript/38264/ Источник: http://i-novice.net/oblako-tegov/#more-101
Простая защита от DoS-атак с помощью MySQL
Организовать простую защиту от DoS-атак для сайтов, использующих PHP MySQL, можно следующим образом. В MySQL создается таблица (будем называть ее ip_check) с полями lasttime, count, ip (все поля — типа INTEGER, причем ip — первичный ключ).
Сразу после подключения к базе данных выполняется проверка, есть ли для данного IP-адреса запись в таблице. Если записи нет, она создается, при этом в count пишется 1, в lasttime — текущее время. Если запись уже есть, то проверяется, когда она была сделана (поле lasttime), и если прошло менее определенного количества секунд, то поле count увеличивается на 1, в противном случае приравнивается единице, и производится обновление записи в таблице (записывается новый count и lasttime). Далее происходит проверка величины count, и если она превысила некоторое пороговое значение, выдается статус 500 (или 403 или 503), сообщение об ошибке, и выполнение скрипта завершается.
Таким образом, для выполнения проверки требуется всего одной таблица с предельно простой структурой и 2 запроса SQL. Также можно добавить еще одно поле status, в которое ставить 1, если IP-адрес забанен навсегда по каким-то причинам, и совместить проверку на DoS-атаки с проверкой на забаненные IP-адреса без добавления дополнительных запросов. При необходимости можно еще одним запросом добавить учет суммарной нагрузки за все время или нагрузки по подсетям.
Кроме того, перед завершением скрипта можно добавить проверку, сколько времени заняло его выполнение, и если оно превышает какую-то пороговую величину (например, 10 секунд), начислять этому IP-адресу “штрафные очки” (т.е. дополнительно увеличивать поле count).
В виде кода это можно представить следующим образом:
// $link -- соединение с БД, $ip_text -- IP-адрес
define('ALERT_TIME',300);
define('ALERT_COUNT',150);
function check_dos($ip_text, $link) {
$ip=ip2long($ip_text);
$res=mysql_query($link,'SELECT lasttime, count, status FROM ip_check WHERE ip="'.$ip.'"');
if (mysql_num_rows($res)==0) { // нет такого IP
$count=1;
mysql_query($link,'INSERT INTO ip_check (lasttime,count,ip,status) VALUES ('.time().',1,"'.$ip.'",0)');
}
else {
$data=mysql_fetch_row($res);
$status=$data[2];
if ($status!=2 && ($data[0]<time()-ALERT_TIME || $data[1]<ALERT_COUNT))) $count=1;
elseif ($status!=2) { $count=$data[1] 1; if ($count>=ALERT_COUNT) $status=1; }
if ($status!=2) {
mysql_query($link,'UPDATE ip_check SET count='.$count,', status='.$status.', lasttime='.time().' WHERE ip="'.$ip.'"';
}
if ($status) {
header($_SERVER['HTTP_PROTOCOL'].' 503 Temporary Unavailable');
trigger_error('Превышено число допустимых запросов!',E_USER_ERROR);
}
}
Кроме того, периодически следует очищать базу от старых записей (например, по cron). Кроме того, если ожидается большая интенсивность атак, возможно, имеет смысл заменить UPDATE-запрос на последовательность DELETE/INSERT, но в этом случае необходимо будет регулярно проводить оптимизацию таблицы.
Источник: Профессиональный Блог 4X_Pro http://www.xpro.su/archives/59
29.09.2008
Работа с датой и временем в PHP 5.2
Рано или поздно при разработке проекта встает вопрос о работе с датой и временем.
Начиная с версии 5.2 ядро PHP предоставляет для этой работы классы DateTime иDateTimeZone. Существующие в PHP 4 и 5 функции для работы с датой и временем: Улучшения работы с датами, начиная с PHP 5.1. Форматы представления даты и времени, начиная с PHP 5.1 Временные зоны, начиная с PHP 5.1 Изменение информации по временным зонам.
01.05.2008
Учебное пособие по PHP MySQL
Это действительно превосходный источник для начинающих PHP-программистов. Автор приводит массу примеров кода, используя который вы сможете сделать:
- подключение к базе данных,
- добавление, редактирование и удаление записей,
- извлечение данных,
- создание резервной копии базы данных.
11.04.2008
Cайты по PHP, бесплатные скрипты PHP
http://www.php.net/manual/ru/index.php официальное руководство по PHP на русском языке http://php-ru.info/ - скрипты на php. http://www.phpclub.ru/?m=app - Здесь собраны php скрипты различных веб-приложений, платные php скрипты в этот каталог не входят, Вы можете заказать PHP скрипты на заказ обратившись к нам.
http://www.php-script.kiev.ua - Бесплатные скрипты PHP. http://nukefiles.ru/ - PHP-Nuke по-русски. Дополнительные модули, блоки, форумы поддержки. http://phpload.org/ - портал про PHP, все что можно узнать об программировании. Введение в PHP, история возникновения и развития PHP. http://phpclub.ru/ - ресурс о PHP, MYSQL, POSTGRES, APACHE. Здесь найдутся: готовые скрипты, очень активный форум с 5000 WEB-программистами, настройка apache, уроки и курсы php5, биржа труда, вакансии. http://www.php-adminka.ru - админка сайта на php MySQL - создание управляемых сайтов. http://php.spb.ru/ - PHP по-русски.
Официальные сайты (на английском): http://www.php.net/ http://phpnuke.org/
Форумы: http://www.phpforum.ru/ http://forum.phpc.ru/ http://forum.php-myadmin.ru/ http://www.phptalks.ru/
Архив блога
-
▼
2008
(113)
-
▼
Декабрь
(16)
- Шаблоны на CSS
- Мотор для блога
- Обзор бесплатных WYSIWYG редакторов
- Кавычки
- Тренды в айдентике: мода или революция?
- Логотипы с LogoLounge.com
- 8 правил оформления ссылок
- Как отразить в бухгалтерском учете создание сайта,...
- Оценка затрат или во сколько обойдется создание са...
- Как определить стоимость сайта
- Модуль Apache mod_rewrite
- Визитка Лебедева
- вэвэвэ чукча руиз серии Чук и Мак автор: Кузнецо...
- Пиксельные логотипы
- Все логотипы мировых брендов в векторном формате
-
►
Сентябрь
(10)
- Работа с датой и временем в PHP 5.2
- Сборник лучших сайтов на sites.bestwebdevs.ru
- Настройка Dreamweaver’a
- Переход с Денвера-2 на Денвер-3
- Какие продукты Adobe поддерживает Vista
- Создание Flex-компонентов
- Бесплатные просмотрщики графики
- Как сделать гиперссылку с flash-банера на нужную с...
- Как узнать о получении новых писем?
- Блог Алексея «Борисыча» Матюшкина
-
▼
Декабрь
(16)
Рубрики
- :) (2)
- Adobe (2)
- apache (1)
- CS2 (3)
- CSS (4)
- denwer (1)
- Dreamweaver (1)
- Flash (2)
- java script (1)
- MySQL (6)
- PHP (7)
- Артемий Лебедев (6)
- безопасность (1)
- веб-разработка (39)
- допечатная подготовка (4)
- инструменты дизайнера (6)
- Календарная сетка (2)
- лого (2)
- логотипы (2)
- мониторы для дизайнеров (1)
- наблюдения (1)
- Наружная реклама (2)
- Перевод текста (1)
- плагины (3)
- портфолио (2)
- Правила дизайна (2)
- Правописание (15)
- просмотрщики изображений (1)
- профессиональные мониторы (3)
- Разработка сайтов (3)
- ресурсы (1)
- Русский язык (1)
- стоит посещать (1)
- типографика (1)
- Фото (3)
- электронная почта (1)
