Все публикации

Функции работы с датой и временем +2
Разное

Очень часто программисту приходится работать с датой и временем, какие же функции могут помочь ему в этом? Я наиболее часто пользуюсь 3-мя:

- time
- date
- strtotime

Давайте рассмотрим каждую из этих функций по порядку. Функция time возвращает количество секунд прошедшее сначала эпохи Unix. (01.01.1970)
Т.е. если выполнить

<?php
echo time();
?>
На данный момент выведет вот такое число 1251829409. Столько секунд прошло с первого января 1970 года.
Функция date имеет гораздо более широкий функционал нежели функция time. Данный оператор форматирует дату так какмы того хотим, кроме того дополнительным параметром можно передавать любое значение timestamp в результате то значение, которое было передано нами будет отформатировано. Приведу простой пример:
<?php
echo date('d.m.y',1251829409);
?>
Данный пример выведет 01.09.09 т.е. ‘d’ это дни с ведущими нулями, m-номер месяца с ведущим нулем и ‘y’ две цифры номера года. Если второго параметра (timestamp времени) функция не имеет, то date возвращает время на настоящий момент.
<?php
echo date('d.m.y'); //выведет дату когда запускался скрипт
?>
Символ в строке format Описание Пример возвращаемого значения
a Ante meridiem или Post meridiem в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
B Время в стадарте Swatch Internet От 000 до 999
c Дата в формате ISO 8601 (добавлено в PHP 5) 2004-02-12T15:19:21+00:00
d День месяца, 2 цифры с ведущими нулями от 01 до 31
D Сокращенное наименование дня недели, 3 символа от Mon до Sun
F Полное наименование месяца, например January или March от January до December
g Часы в 12-часовом формате без ведущих нулей От 1 до 12
G Часы в 24-часовом формате без ведущих нулей От 0 до 23
h Часы в 12-часовом формате с ведущими нулями От 01 до 12
H Часы в 24-часовом формате с ведущими нулями От 00 до 23
i Минуты с ведущими нулями 00 to 59
I (заглавная i) Признак летнего времени 1, если дата соответствует летнему времени, иначе 0 otherwise.
j День месяца без ведущих нулей От 1 до 31
l (строчная ‘L’) Полное наименование дня недели От Sunday до Saturday
L Признак високосного года 1, если год високосный, иначе 0.
m Порядковый номер месяца с ведущими нулями От 01 до 12
M Сокращенное наименование месяца, 3 символа От Jan до Dec
n Порядковый номер месяца без ведущих нулей От 1 до 12
O Разница с временем по Гринвичу в часах Например: +0200
r Дата в формате RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200
s Секунды с ведущими нулями От 00 до 59
S Английский суффикс порядкового числительного дня месяца, 2 символа st, nd, rd или
th. Применяется совместно с j
t Количество дней в месяце От 28 до 31
T Временная зона на сервере Примеры: EST, MDT …
U Количество секунд, прошедших с начала Эпохи Unix (The Unix
Epoch, 1 января 1970, 00:00:00 GMT) См. также time()
w Порядковый номер дня недели От 0 (воскресенье) до 6 (суббота)
W Порядковый номер недели года по ISO-8601, первый день недели – понедельник (добавлено в PHP 4.1.0) Например: 42 (42-я неделя года)
Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
y Номер года, 2 цифры Примеры: 99, 03
z Порядковый номер дня в году (нумерация с 0) От 0 до 365
Z Смещение временной зоны в секундах. Для временных зон
западнее UTC это отрицательное число, восточнее UTC – положительное. От -43200 до 43200
Ну и в заключении рассмотрим еще одну функцию работы с датой и временем strtotime. Данная функция преобразует строку даты на английском языке в timestamp.
Пример:

<?php
echo strtotime("now"), "\n";
?>
Напомню что это далеко не все функции работы с датой и временем в php. Советую почитать официальную инструкцию чтобы знать большеsmile

Защита от злоумышленника фильтр данных +13
PHP

Одной из важнейших задач встающих перед начинающим разработчиком php является защита от взлома кода. Взломать конечно можно по разному, но в большинстве случаев взлом происходит из-за невнимтельности(читайте усталости, ваш покорный слуга круглыми ночами в свое время занимался разработкой проектов в следствии чего под утро писал такой код что на след…вечер было самому страшно смотреть) программиста. Важнейшее правило-фильтруйте любые приходящие от клиента. Будь то e-mail, обычный текс, число, браузер, или даже IP. С числовыми данными все просто. Для того чтобы быть точно уверенным что число “не грязное” надо всего лишь четко задать тип данных в переменно-int или привести ее к целочисленному значению (intval). Приведу небольшой пример:

<?php
$var = $_GET['var']; 
// Из глобального массива гет получаем элемент. Если считаем что это должно быть число - фильтруем.
$var = (int)$var; 
// Теперь точно тип integer и никакой бяки)
?>
Ну с числами вроде все понятно. Как же фильтровать текстовые данные? я видел много различных способов защиты от разных ухищрений приведу сейчас самый распространенный, который защищает исключительно от MySQL иньекций. (MySQL иньекция это выполнение запроса в БД с данными или параметрами которые могут помочь получить злоумышленнику какую-либо закрытую информацию или обновить данные в БД. О базах данных подробнее опишу позднее.) Вот пример чтобы сразу было ясно.
<?php
$var = mysql_real_escape_string(htmlspecialchars($_GET['var']));
?>
Функция mysql_real_escape_string экранирует все спецсимволы MySQL в строке. (Надо заметить что чтобы не было двойного экранирования нужно чтобы были отключены magiq quotes на сервере) Ну, а htmlspecialchars просто превращает символы ‘<','>‘,’&',’”‘ в html сущности (чтобы потом при выводе страницы не заморачиваться с фильтрацией данных). Вот так вот) И не блондинки вам на сайт и не хакера)

Ускорение работы сценариев PHP +6
PHP

Любой уважающий себя программист должен понимать, что сервер имеет конечное число ресурсов, которые рано или поздно заканчиваются. Поэтому требуется как можно тщательнее оптимизировать программный код, дабы потом не хвататься за голову и не сокрушаться что сервера не справляются. Каким же образом оптимизировать код? На самом деле, если не затрагивать MySQL (о чем надо, я считаю, говорить отдельно), способов оптимизации не так уж и много. Точнее их не мало, но результат от них, по отдельности очень маленький, а суммарно, как говорится, “копейка рупь бережет”.. Сейчас я хочу перечислить то, что знаю, и чем очень часто пользуюсь.
1- Вы должны осознавать что при преобразованиях (preg_replace, str_replace) регулярки используют гораздо больше ресурсов чем строковые функции, поэтому рекомендую там где можно обойтись использовать именно str_replace или str_ireplace
2- Помните о том, что в большинстве случаев, если все же надо использовать регулярку preg_match работает быстрее чем eregi
3- Незачем генерировать файлы содержащие большие обьемы данных, если часто с ними надо работать сценарию. Гораздо лучше использовать множество мелких файлов. Хотя и в количестве файлов надо стараться знать меру.
4- Незачем повторно выполнять одни и те же действия если вы можете создать переменную, которая будет содержать результат действия.
5- Надо помнить, что например функция echo при выводе работает быстрее чем print, а вывод заключенный в одиночные кавычки работает быстрее чем в двойные. Связано это с тем, что в двойных кавычках текст еще и обрабатывается (переменные преобразуются), а в одиночных выводится как есть.
6- Не стоит вводить переменные с длинными именами, в дальнейшем это может аукнуться весьма сильно.

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

Работа с сессиями в PHP или пошагово задаем данные -4
Разное

Помните экран установки windows? Пошаговая настройка, удобнейшая вещь в некоторых случаях. При разработке WEB-сайтов, такое тоже весьма уместно применять. Ведь пользователю не важно как все устроено внутри, главное-чтобы ему было удобно и интуитивно понятно, и, такие интерфейсы удовлетворяют этим условиям. Но как же их реализовать? Ведь у нас есть фактически лишь три метода передачи: POST, GET и COOKIE. Ну не пихать же эти данные в тело страницы, в адресную строку&#8230;и уж упаси Боже в печенье. Это еще можно сделать с 1-3 переменными, а если данных очень много-все, пиши-пропало. Но, разработчики PHP тоже не лыком шиты, они придумали механизм который способен хранить данные, причем, он хоть и основан на работе с файлами, с сериализованными массивами, довольно сильно облегчает жизнь разработчику. Что же это такое? Это сессии. <span id="more-446"></span><br />
Итак, каков же механизм сессий? Да все очень просто, данные хранятся в файлах на сервере, во временной дирректории, вид хранения-сериализованные данные. Т.е в этих файлах хранится глобальный массив $_SESSION. Главный плюс в том, что для каждого пользователя, зашедшего на сайт существует своя сессия, т.е для каждогго пользователя вы можете сами задать набор данных. Давайте я для начала приведу простую схему. Например, не так давно я делал для одной фирмы, продающей новые автомобили, конструктор авто, т.е пользователь сам мог выбирать какие доп функции и комплектациюю ему поставить на машину. У нас есть схема<br />
Марка->Модель->Двигатель+Коробка->Салон(Множество дополниптельных функций)+Кондиционер->Цвет->Страница заказа.
После каждого шага я все отправлял в сессию..и спокойно получал из нее требуемые мне данные. При выборе цвета, я знал все о предыдущих шагах. Я еще раз хочу подчеркнуть, не стоит изобретать велосипед, если есть готовое решение. Это удобно и просто. Надо лишь уловить суть.
Я надеюсь вы осознали все плюсы этого механизма, и теперь уже придумываете применение ему&#8230;что ж..мучать вас не буду и приступлю к технической части, к описанию кода.
Прежде всего нам надо инициилизировать сессию. Это делается с помощью

<a href="/php-manual/?function.session-start">session_start();</a>
После этого нам будет доступен массив с данными $_SESSION. Чтобы положить какие то данные в сесию нам всего лишь надо присвоить значение элементу массива. Например вот так:
<?php
session_start();
$_SESSION['user'] = 1;
?>
Все теперь в сессиях записан элемент с ключом user и значением один. После перезагрузки страницы, если сессия стартует, то данные можно будет извлечь из массива. Надо сказать что сервер должен как-то идентифицировать пользователя…для этого у каждой сессии есть собственный идентификатор. Идентификатор может как писаться в строку гет запроса, так и передаваться через кукисы. (еще раз повторюсь что в куках только идентификатор, а все данные на сервере) Если вы храните идентификатор в куках, то он будет доступен только до закрытия браузера. Если же вы хотите передавать параметром через гет..что ж ваше право.но писать каждый раз перменную идентификатора..беее…долго и неудобно. Все делается гораздо проще. В PHP есть предопределенная константа SID. Она всегда содержит имя группы сесий и идентификатор, т.е. выглядит примерно так имя=идентификатор. Имя группы сессий можно задать командой session_name(), но данный оператор должен вызываться до инициализации сессий… Но это не все возможности сессий, идентификатор может подставляться в формы и в гет запросы автоматически. Для этого до того как инициализировать сесию требуется установить параметр PHP с помощью команды ini_set() вот так:
<?php
ini_set("session.use_trans_sid",true);
?>
Теперь PHP будет автоматически подставлять данные в линки, содержащие адрес вашего сайта, в формы. Кстати, чтобы лучше понять механизм ini_set() рекомендую зайти и посмотреть как реализуются другие задачи с его использованием, например как сделать карту сайта для phpBB3. Ресурс будет полезен, тем кто решил освоить не только PHP и MySQL.
Надеюсь не утомил вас столь обьемным описанием. Есть еще обработчики сессиий, но про это я напишу позже

Как разговаривать с "гопниками"? +11
Разное

Кролики и удавы:Их оружие - наш страх.
Наш страх оттого, что мы не знаем правил, по которым действует "тот" мир. Но мы заведомо их уважаем. Потому что это правила сильных - понятия. Мы уважаем мир сильных, мир воров и авторитетов. Но прямой доступ туда закрыт, полный свод понятий не доступен простому смертному. Мы их заведомо принимаем, но не знаем их принципов и норм. Вот тут вот собака и зарыта. Принимаем правила игры, не зная их. Естественно, что мало-мальски "наблатыканый" ***, будучи даже тщедушным доходом, зная пару "примочек", обыграет вас в два счета. Потому что вы согласились играть по его правилам. А человек, добровольно согласившийся играть по правилам, которых он не знает, называется лох.

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

Гопники же не совсем преступники. Они следуют по тонкой грани - вначале "наезжают" на жертву "базаром", прощупывают ее, вызывают страх, замешательство. Причем делается это без прямой угрозы насилия - со стороны будет казаться, что гопник сама вежливость, а вы, наоборот, нервный, неуравновешенный, а то и вовсе агрессивный тип. В результате такого наезда жертва, как правило, сама отдает свое имущество - обычно небольшие деньги, мобильники, часы. Хотя для гопника это не главное - он может и ничего с вас не взять. Ему важно ощутить свое превосходство. Заставить вас его бояться.

Все часто находится на грани "шутки", разговора "по понятиям", так что затем при разборках всегда можно сказать - он мне сам отдал. Что нередко подтверждает и сама жертва:

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

Если вы в милиции, то опер начинает нервничать, а то и вовсе звереть, и, в конце концов, старается от вас избавиться. Юридических оснований нет. Если разборка среди братвы, то вы получаете статус лоха. А получить с лоха - святое дело для гопника. Он пацан, вы лох. По понятиям он прав. Разговор окончен.
Что отвечать на вопросы типа:"Эй, иди сюда!"

Это прямое приглашение к войне - т.е. война уже идет. Психологическая. Главное не струсить и не спешить подходить, даже если вы явно уступаете в силе. Хоть и не стоит открыто демонстрировать свою крутость. Кто начинает, тот и должен обосновывать свои действия. Поэтому, если вас только прощупывают таким образом, то надо перевести "беседу" в другое русло.

Итак, по ситуации - останавливаетесь или поворачиваетесь, одним словом, выражаете некоторую заинтересованность. Не подходите.

- Эй, сюда иди, я сказал!

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

Подходят к вам. Страшно.

- Ты что, не слышишь? (отморозился, припух...)

Не обращаете внимания, морозитесь, типа, дальше:

- Могу чем-то помочь?
Мы не лохи

Если ваша "беседа" началась не с прямой провокации вроде описанной выше, то обычно гопник при встрече протянет вам руку - здоровается с вами типа по-пацанячи. Это обязывает вас быть в меру вежливым, ответить на первые вопросы. Чего он и добивается. Это один из главных трюков гопника - после такого жеста "доброй воли" он получает право "справедливо" возмутиться тем, что вы, например, не захотите с ним общаться. Плюс он сразу создает себе алиби - "Я к нему по-пацански подкатил, клешнями потрясли. Было ж так!?" - "Ну да…" - "И люди вон видели. А потом он начал понты мне строить…". 1:0 в пользу гопа.

Обламываем в самом начале. Это очень трудно выдержать - взгляд и протянутую тебе руку. Трафареты вежливости вбиты в нас глубоко. Рука сама тянется. Держимся. Смотрим в лицо. Улыбаемся.

- Ты кто?

Знаю, что это трудно, тем более если ваш оппонент явно вас сильнее или за его спиной толпа. Но вы ИМЕЕТЕ НА ЭТО ПРАВО. Правильный пацан не пожмет руку первому встречному, не узнав вначале, кто перед ним. В тюрьме вообще за руку не здороваются, например - а порядки тюрьмы для гопника это святое. И вы не обязаны жать первую попавшуюся лапу. "А может ты и не пацан вовсе - кто ж тебя знает" - намекаете вы. Но намекаете так, что у него нет права вас в чем-то обвинить. И к тому же у него закрадываются подозрения, что вы знаете правила игры.

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

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

-...вы кто такие, вы сами откуда?
-...дай-ка телефончик посмотреть.
-...есть деньги?
-...по какому случае выпиваем?
-...вы по жизни-то кто?
Мороз. (Может быть пропущен)

Итак. Улыбаетесь ОБЯЗАТЕЛЬНО и говорите:

- Я тебя не знаю.

Идете (стоите) дальше.

Если это не сработало (скорее всего, что нет) и вопросы продолжаются, а интонации усиливаются, дальше надо переходить в наступление:
Лучшая оборона - нападение.

Универсальный ответ - работает всегда:

- С какой целью интересуешься?

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

Ни в коем случае не идти ни на малейшую уступку - не отвечать ничего. НИ НА ОДИН, пускай даже совершенно невинный, ВОПРОС. Как только вы ответили что-то, пускай даже самое нейтральное, но по сути вопроса, и захотите прервать разговор впоследствии, у агрессора появляется "моральное право" обвинить вас в неуважении к себе, т.е. получить это самое право перейти к жестким действиям. Вы ведь разговор "поддержали", а потом отказываетесь продолжать. Не красиво.

Прямой ответ на свой вопрос вы, конечно, не получите. Масса вариантов дальнейшего развития:

- А что, западло с пацанами побазарить?
- Ты что, грубишь?
- Ты меня не уважаешь?
- Я не понял...
Никогда не оправдываться

Во всех случаях нужно "тупо" продолжать свою тему. Ни в коем случае, снова же (см. выше) не отвечать на вопросы - "я тебя уважаю, но...", "я не грублю, но...". Ваше "но" будет сразу расценено как слабость. Если дальше последует фраза "А что это ты оправдываешься? Чувствуешь за собой что-то?" или ей подобная, то вам на нее уже ответить будем нечем. Это 100% трюк - уже не имеет значения, что вы отвечаете или просто молчите, все будет повернуто как попытка либо оправдываться, либо грубить.

- Я не оправдываюсь, - смотрите на себя со стороны, сами понимаете, что звучит это просто тупо. Но, тем не менее, говорите.
- Обоснуй.
- Почему я должен обосновывать?
- Потому что ты оправдываешься.
- Да не оправдываюсь я!
- А сейчас ты что делаешь?
- Я... ну... да ну тебя! Я не хочу с тобой разговаривать.
- О, да ты еще и грубиян...

Все. Дальше либо бегство, либо избиение, либо унижение с изыманием материальных ценностей.
Ломаем ситуацию.

- Что, западло с нормальными(!) пацанами побазарить? - это вероятный ответ на вашу контратаку.

Помним - никаких "нет", "не", и тем более "но".

- Ты не ответил на мой вопрос.

Не лишним будет продолжать улыбаться.

- А ты на мой.
- Собираешься по беспределу наехать?
- Ты меня в чем-то обвиняешь?
- Просто ответь на мой вопрос. Имею право поинтересоваться?

Обратите внимание - именно "поинтересоваться". "Спросить" имеет двойной смысл на фене - спрашивают с кого-то за что-то, что сразу же будет расценено как наезд - "Имею право спросить". - "Что? Спросить с меня? За что? Обоснуй". Все, снова же тупик, вы в торбе.

- Для себя интересуюсь.

"Для себя интересуюсь" - дежурная фраза-ответ на вопрос "с какой целью интересуешься?". Все прекрасно. Как только вы услышали что-то подобное, враг дрогнул - вы заставили "правильного пацана" оправдываться. Теперь главное не перегибать палку.

- Я тебя не знаю.

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

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

Цикл может повториться в разных вариациях. Вы просто держитесь за свою позицию, смысл которой - КТО НАЧАЛ РАЗГОВОР, ТОТ И ДОЛЖЕН ОБОСНОВЫВАТЬ ПРИЧИНУ.

По сути же, причина ОДНА, и вы о ней должны помнить - СПРОВОЦИРОВАТЬ ВАС И ПОЛУЧИТЬ МОРАЛЬНОЕ ПРАВО напасть, оскорбить, унизить, ударить, отобрать. Но, естественно, "правильный пацан" никогда ее не озвучит, потому что тогда он сам признает себя беспредельщиком. А это уже не по понятиям - правильные пацаны не чинят беспредел. Т.е. вы задаете вопрос, на который он не может ответить, но, по его же правилам, обязан. В шахматах это называется "вилка" - одной фигурой нападаем на две. Противнику остается выбор только в том, какую фигуру потерять.

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

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

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

- Подай мне стакан.
-...

Молчим, улыбаемся. Ждем обвинений…

- Тебе в падлу, что ли?

... и переходим в контратаку.

- Проверка на лоховскую масть? (или:- Наехать на меня хочешь?)
- Я тебя как нормального пацана прошу.

Вы заработали балл, он оправдывается. И при всех называет вас "нормальным пацаном". Еще один балл.

- А-а. Извини, не понял. На.
Ничья на чужом поле - это победа.

Если же побежденным быть не хочется, то гопу остается только одно -

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

2. либо "признаться" в том, что цель была иная - познакомиться, пообщаться, вместе провести время. То есть уйти от поражения. Что и требовалось. Ничья на чужом поле нас вполне устраивает.

"Вилка" - он уже выбирает только между тем, какой вариант поражения принять. Скорее всего он не дурак.

- Не знаешь меня? Ну так давай познакомимся.

Можно пожать лапы.
Не увлекаться победой

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

После знакомства, правда, могут снова последовать циклы тех же ответов и вопросов, а само знакомство было только уловкой - просто надо быть БДИТЕЛЬНЫМ и ни в коем случае не расслабляться. Сколько бы таких циклов не было, ваша задача одна - не предоставить повод. Повторюсь - это значит:

Не оправдываться.
Не отвечать на вопросы.
Не выполнять просьбы
Не срываться на "высокие" тона - оставаться вежливым и спокойным.
Продолжать требовать ответа на свой вопрос.
Задавать "неудобные" вопросы.
Улыбаемся

Заметьте - улыбаемся. Это важно. Это сбивает с толку, заставляет нервничать нападающего. Это заставляет его опасаться и действовать осторожно - "чего это он лыбу давит? Может знает чего? А сам под дурачка косит..."
Даже если...

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

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

Стратегические ошибки здесь возможны две:
- страх возьмет верх и вы сдадитесь, начав бормотать что-то нечленораздельное и с готовностью отдадите все, что у вас "попросят".
- вы почувствуете себя на коне и решите развить успех, превысив допустимую дозу наезда - скорее всего, будете в таком случае побиты.
Проверка пройдена

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

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

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

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

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

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

Даже если страшно, вспомните эти простые правила, и не отступайте от них. Потому что последнее и главное правило - не оборачиваться. Либо не начинать вообще, либо, начав, не сдаваться.

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

Конечно, это только канва, всегда понадобится ваше творчество. Страх внесет свои коррективы, но, тем не менее, это возможно ПОМНИТЬ.

ДДОС атака +9
Безопасность

Статья информируется о ДДОС атаке так и защите от неё.
Что такое dos атака?
Собственно дословно термин «DoS» расшифровывается и переводится как «отказ в обслуживании». Соответственно dos атака (дос атака ) это действия направленные на то, чтобы спровоцировать такую реакцию оборудования. Термин « ddos » переводится как «распределенный отказ в обслуживании». Соответственно ddos атака ( ддос атака ) - распределённая атака типа «отказ в обслуживании». Проводится такая ддос атака с огромного количества различных ip адресов, принадлежащих зараженным компьютерам. Не всегда то, что выглядит как дос атака , является именно ею. Иногда отказ в обслуживании может быть вызван естественными причинами – например удачной рекламной компанией, после которой количество запросов на сервер превышает его пропускную способность.
Кому необходима защита от ddos атак?
В первую очередь ddos атака обычно направлена на организации, которые работают с деньгами. Поэтому защита от ддос атак требуется онлайн-казино, Интернет-магазинам и банкам, осуществляющим финансовые операции в сети. Во время различных политических событий anti ddos должен применяться на сайтах кандидатов в депутаты или президенты. Недавние события, связанные с выборами в Украине ещё раз подтвердили, что защита от ддос атак – это не прихоть, а необходимость. Для них защита от ддоса должна быть ещё более серьезной. Более того, лучше использовать хостинг с защитой от ddos.
Как защитить сайт от ddos?
Защита сайта от ddos атак - это сравнительно новое направление в науке. Совсем недавно если атаки происходили, то все они носили не слишком масштабный характер, и их можно было очень легко обнаружить. Сейчас ситуация изменилась. Специалисты говорят о том, что в 2009 году количество атак резко увеличилось, поэтому защита от ддос атак стала необходимой для успешной работы веб-ресурсов.
Сама по себе защита от ddos атак сервера или сайта – это процесс непрерывного поиска возможных угроз и своевременное их устранение. Лучше всего, если защита от ddos атак будет производиться на стороне оператора, поскольку именно там ddos ддос атака и возникает, прежде всего. Что касается компьютеров пользователей, то защита от ddos атак с их стороны будет менее эффективной. Оператору следует понять, что ддос атака для него всё равно неизбежна, поэтому нужно быть готовым к ней. Именно эти функции выполняет хорошая защита от ддос атак.
Защита от ддос атак в современных условиях
Сегодня борьба с ddos стала действительно актуальной, так как по мере развития технологий увеличивается не только мастерство специалистов, обеспечивающих достойные условия работы в сети Интернет, но и усиливается давление хакеров, которые применяют самые разнообразные способы для того, чтобы ддос атака была эффективной. Интересно, что ранее злоумышленниками производилась вполне безобидная флуд атака на сайт или же хакеры заражали компьютеры вирусами, которые было достаточно легко обнаружить, поскольку в результате действия таких программ исчезали файлы и переставали работать некоторые программы. Сегодня же хакеры стали хитрее, поэтому современная ддос атака практически незаметна для рядового пользователя. К тому же, злоумышленники постоянно пополняют свой арсенал знаний и навыков, разрабатывая зловредные приложения, из-за которых защита от ddos атак значительно усложняется. К сожалению, современные условия таковы, что защита от ддоса – это один из тех вопросов, которые требуют постоянного внимания.
Если Вам необходима стопроцентная ддос защита сайта, то существует достаточно действенный способ обеспечения безопасности системы – это администрирование. Метод анти ддос в данном случае заключается в круглосуточном мониторинге возможных атак на сервер. Ddos атака в этом случае будет отсекаться вручную.
Уверенная и защита от dos атак возможна в случаях аренды выделенного сервера. При этом защита от дос атак заключается в том, что за Вашей машиной ведётся постоянное наблюдение со стороны специалистов data-центра. Если пользователя интересует надёжная защита от ддоса , то при помощи выделенного сервера это становится возможным. Если пользователю нужно обеспечить сохранность и безопасность документов, он может разместить их на своём дисковом пространстве выделенного сервера. Защита от dos атак будет распространяться и на них.
Как защититься от ддос путём очищения трафика
Существует ещё одна защита от dos атак при помощи очищения трафика до его поступления на ресурс. Сегодня такая защита от дос атак также доступна и является достаточно эффективной, хотя все замаскированные и сложные атаки требуют привлечения операторских ресурсов, а также архитектуры для того, чтобы атака была предотвращена. При этом повышенная защита анти ddos также включает в себя разнообразные программно-аппаратные комплексы: системы самообучения (модуль защиты от ддос ), быстрого обнаружения и мгновенной фильтрации (скрипт защиты от ddos ). Такая защита от дос атак позволит владельцу веб-сайта чувствовать себя в безопасности.
Иногда применяются и другие способы защита сайта от дос атак , которые предусматривают наличие глубоких технических знаний и умений. При этом используются эвристические алгоритмы, которые способны отфильтровывать трафик, отделяя обычный пакет от аномального. Такие алгоритмы постоянно обновляются, поскольку вместе с новыми открытиями существенно растёт и мастерство хакеров.
На сегодняшний день организация защиты «анти ддос атака » может осуществляться на различных уровнях и с использованием различных инструментов. Всё это зависит от компании, которая предоставляет данную услугу. При этом заказчик и оператор системы, как правило, постоянно контактируют, а потом решают, когда защита от ddos необходима, а когда её можно прекратить.
Вообще же сейчас подобные атаки чрезвычайно распространены, поэтому, если Вы знаете, что у Вас имеются явные конкуренты, лучше всего, если Вы попытаетесь защитить свои ресурсы от возможных заказных атак. Они могут быть действительно серьёзными, в результате чего работа системы будет парализована, а Вы потеряете важных клиентов и, как следствие, денежные средства.
Ну вот и конец smile желаю стабильности вашему железу!

Защита от спам-роботов +12
PHP

Спам-роботы, на сегодняшний день, по уровню технологий достигают высоких вершин. Спам-роботы, каждый день усовершенствуются и засоряют сайты различной информацией. Целью спам-робота является размещение на сайте ссылки на некоторый ресурс или тематической информации. Однако, встречаются и просто добавление наборов символов (не имеющих смысла) и ссылок на несуществующие хосты. В любом случае, со спам-роботами нужно бороться.
Принцып их работы приблизительно такой: сначала они анализируют всемирную паутину на поиск сайтов, подходящих им по определенным критериям. Потом, индексируют страницы сайта с формами (формы коментариев/сообщений). Далее следует анализ формы и ее защиты. Если спам-программа успешно добавляет данные в форму и они размещаются на странице, то такая страница попадает в общую базу данных для дальнейшего систематического добавление спама (от 1-3 раз в день).
Защитить свой сайт полностью от проникновения нежелательной информации стало практически почти невозможным. И эффективно бороться со спамом можно, лишь используя комплекс эффективных мер.
К, таким мерам можно отнести:
1. использование капчи (капча - графический рисунок с изображением цифр/символов). Этот метод очень популярный и почти на каждом сайте вы можете найти различные формы для заполнения их посетителями использующие защитный код с помощью капчи. Вы, наверное, уже замечали насколько трудно иногда угадать посетителям, что же там изображено, настолько веб-мастера изощренно искажают цифробуквенный код. Это потому, что спам-роботы научились распознавать капчи. Если вы используете простую капчу, то шанс взлома формы возрастает.
Пример написания простой капчи на php:

<?php
$nomer = rand("1000","9999");/* выбираем случайное число от 1000 до 9999*/
$imge = imagecreate("50", "15"); /*создаем рисунок в ширину 50 пикселей и высоту 15*/
$background_color = imagecolorallocate ($imge, 255, 255, 255);/*задаем рисунку цвет фона*/
$green = imagecolorallocate($imge,10,110,190);/* устанавливаем цвет текста для нашего рисунка*/
imagestring($imge,4,4,0,$nomer,$green);/*рисуем текст с такими параметрами: $imge(наш рисунок),4 (размер шрифта (от 1 до 5)),4 (отступ на 4 пикселя слева),0 (отступ в пикселях сверху),$nomer (текст),$green (цвет текста)*/
header("Content-type: image/jpeg");/* посылаем заголовок серверу про то, что мы передаем ему рисунок формата jpeg*/
imagejpeg($imge); /*выводим рисунок*/
imagedestroy($imge);/* освобождаем память*/
?>
Путем добавления различных image-функций php, Вы можете значительно видоизменить свою капчу и повысить уровень безопасности своей формы.
Очень хорошим способом защиты будет создание капчи с простым вопросом, понятным посетителю и не подающийся анализу спам роботу. Например, указать количество фигур, простая логическая задача и т.п.
2. блокирование спамеров по ip-адресу. Этот способ может пригодится, если можно определить ip-адрес спамера, но, как правило, спам-роботы используют прокси-серверы и определить реальный ip не предоставляется возможным.
Для определения ip-адреса можно использовать следующую функцию:
<?php
$ip = $_SERVER["REMOTE_ADDR"];
//однако если бот использует анонимные прокси-сервера, а так оно скорее и есть, то пределить реальный ip-адрес Вам поможет эта функция
function getip()
{
   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"),"unknown")) $ip = getenv("HTTP_CLIENT_IP");
   elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR");
   elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR");
   elseif (!empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR'];
   else $ip = "unknown";
   return($ip);
}
$ip = getip(); 
?>
3. блокирование спам-роботов с помощью параметра REFERER (адрес предыдущей страницы-источника откуда выполнен переход). Если этот параметр пустой значит робот-спам напрямую выполняет запрос к Вашей форме. Ведь большинство спам-роботов так и делают, они читают страницу лишь один раз, все остальные попытки добавления спама идет с помощью прямого обращения робота к серверу. Другими словами с прокси-сервера происходит отправка уже готового запроса к серверу и передаются уже наперед известные данные.
Пример получения значения поля REFERER на php:
 <?php
$referer = getenv("HTTP_REFERER"); //или
$referer = $_SERVER["HTTP_REFERER"];
?>
 
4. блокировка/удаление спама с помощью фильтра текста на спам-слова.
Данный вид защиты является самым эффективным. Весь переданный/полученный текст фильтруется на наличие спама по словосочетаниям и словам.
Слабым местом спам-роботов является их ограниченный по смыслу спам-текст, в котором почти всегда повторяются одинаковые ключевые слова.
Стоп-слова Вы можете занести в базу данных и проверять каждое сообщение/коментарий на их наличие используя функцию stristr (регистро-независимый вариант strstr).
Пример проверки текста комментария на наличие спам-слова "casino":
<?php
if (stristr(html_entity_decode("Это текст комментария, здесь спам-робот может пригласить Вас сыграть в казиноcasino"),"casino") == true) {
   echo "Найдены элементы спама!"
} else {
   echo "Комментарий успешно добавлен!"
}
?>
Как видно в примере, мы делаем проверку текста комментария/сообщения на наличие спама до того как добавляем в базу данных. Но, также, желательно делать проверку и после того как информация попала в базу данных, потому что спам-роботы могут изменять символьное представление текста через функции, чтобы Ваш фильтр не сработал и в тоже время, учитывая дальнейшую обработку текста сервером, в базу данных будет занесено слово/словосочетание аналогичное Вашему слову-спаму.
Спам-роботы, также, могут передавать форме слова/словосочетания которые состоят из вариаций символов и кода символов html. Для того, чтобы перевести html код в символы используем функцию html_entity_decode.
Вот пожалуй и все, надеюсь перечисленные выше способы защиты ваших страниц от спама помогут Вам

Вывод страницы по резолюции экрана +8
JavaScript

Для корректного отображения страниц html, необходимо подстраивать код страницы под различные расширения экранов дисплея пользователей. Для этого идеально подходит использование Javascript. Однако, не стоит забывать и про то, что некоторые пользователи отключают Javascript в браузерах, с целью ограничить себя от лишний выскакиваемых окон с рекламой.
Итак, стоит задача: корректно отобразить web-страницу под различными расширениями дисплеев.
Но, также, необходимо учесть следующие моменты:
- пользователь отключил Javascript;
- не использовать процентное деление ширины ячеек таблиц (так как, имеет место автоматическое увеличение браузером ширины ячеек при помещение в них различных компонентов, например, <textarea>).
Нам необходимо выполнить следующие действия:
1. создать обычную web-страничку;
2. присвоить таблицам и ячейкам, которые должны динамически изменятся, итендификаторы;
3. с помощью Javascript определить резолюцию дисплея и изменить значение ширины таблиц/ячеек на нужную.
Давайте рассмотрим краткий пример, создайте простую web-страничку:

   <html>
<head>
<title>Пример отображения ширины таблицы на дисплеях с разными резолюциями</title>
</head>
<body>
<script src="width_table.js" type="text/javascript"></script>
<center>
<table id="table1" width="977" cellpadding="0" cellspacing="0" border=1>
<tr>
<td width=200>Ширина ячейки 200 пикселей и не меняется</td>
<td id="td1" width="577">Ширина ячейки динамически меняется</td>
<td width=200>Ширина ячейки 200 пикселей и не меняется</td> </tr>
</table>
</body>
</html>
   
Как Вы заметили, мы подключаем к странице файл "width_table.js" с кодом Javascript.
Создаем файл "width_table.js" со следующим текстом:

   function width_table()
{
var main_width=screen.width-47;/* 47 пикселей мы отнимаем для того чтобы табличка была чуть меньше ширины браузера и внизу не появлялась горизонтальная прокрутка*/ 
if (document.getElementById("table1")) {document.getElementById("table1").width=main_width-47;}
if (document.getElementById("td1")) {document.getElementById("td1").width=main_width-47-400;}/* 400 пикселей это сума ширины боковых колонок таблицы ширина которых должна быть фиксированной*/
}
setTimeout("width_table()",100);/* запускаем выполнение скрипта через 100 мс*/
   
Теперь, кратко рассмотрим что происходит.
1. страница загружается и скрипт выполняется smile
2. переменная screen.width приобретает значение резолюции дисплея в пикселях (например, 1024, 1152, 1280).
3. далее вызываем элементы страницы через их итендификаторы и присваиваем им новое значение. Первично страница настроена на дисплей с резолюцией 1024, поэтому ширина нашей таблицы и равняется 977 (1024-47), а средняя колонка - 577 (1024-47-400).
Также, мы учли момент, если у пользователя отключен Javascript. В этом случае, размеры таблицы остаются в первосозданом виде и благодаря тегу <center> размещенному перед таблицей она будет отображаться в центре страницы.
Данная статья носит более теоретический характер, чем практический. На практике большинство веб мастеров для растяжения страницы сайта на всю ширину дисплея используют свойства процентного растяжения таблиц. Но из-за того, что браузер строит таблицы сразу же по мере их загрузки, не всегда корректно отображаются столбцы/рядки с не зафиксированным размером. Обычно это решается с помощью вложенных таблиц, но также это можно решить и с помощью javascript.

Часы при помощи JS +7
JavaScript

В этом примере описывается создание динамических часов с помощью Javascript. Для тех, кто только начинает изучать Javascript будет полезно детально разобраться в каждой детали функции.
Итак, перед нами стоит задача: создать на странице динамические часы, значение которых будет обновляться ежесекундно. Формат часов возьмем самый обычный hh:mm:ss (например, 16:05:45), где h - время суток, m - минуты, s - секунды.
Создадим простую web-страницу "index.html":

<html>
<head>
<title>Пример отображения динамических часов</title>
</head>
<body>
<script src="time.js" type="text/javascript"></script>
<center>
<table width=100% cellpadding=0 cellspacing=0 border=1>
<tr>
<td width=100%>Текущее время: <span id="tick_tack"></span></td>
</tr>
</table>
</body>
</html>
Как Вы заметили, мы подключаем к странице файл "time.js" с кодом Javascript.
Создаем файл "time.js" со следующим текстом:
function time(){
if (!document.all&&!document.getElementById) return
thelement=document.getElementById? document.getElementById("tick_tack"): document.all.tick_tack /* переменная thelement получает свойства элемента с итендификатором "tick_tack" */
var Digital=new Date()
var hours=Digital.getHours()
var minutes=Digital.getMinutes()
var seconds=Digital.getSeconds()
var dn="PM"
if (minutes<=9) minutes="0"+minutes
if (seconds<=9) seconds="0"+seconds
var ctime=hours+":"+minutes+":"+seconds
thelement.innerHTML="<b style='font-size:14;color:black;'>"+ctime+"</b>" /* браузер с помощью свойства элемента innerHTML отображает получаемое текстовое значение на месте этого элемента*/
setTimeout("time()",1000)} /* запускает на выполнение функции time каждые 1000 мс (1 секунда) */
window.onload=time /* запускает выполнение функции time при загрузке web-страницы */
Разместите оба файла в одной папке и запустите файл "index.html". Если часы не показываются, проверьте включена ли в браузере использование Javascript.
Теперь, кратко рассмотрим что происходит:
1. страница загружается, подгружается скрипт "time.js".
2. в скрипте получаем системное время и выводим его в текстовом формате вместо элемента с итендификатором "tick_tack".

Защита и усложнение javascript кода +5
JavaScript

Создавая свой сайт каждый программист рано или поздно сталкивается с вопросом: а можно ли защитить свой сайт от копирования?
Конечно, тут нужно разделить свое желание защитить сайт на несколько деталей и разобраться, что именно Вы хотите защитить. Как правило, условно поделить области информации, которую желательно защитить можно на такие фрагменты:
1. защитить страницы и текст на этих страницах, это же означает защитить html код;
2. защитить код javascript от просмотра;
3. защитить исходники с кодом php на самом сервере.
В данной статье я коснусь вопроса о способах защиты js кода. А что касается защиты html и php кода, то постараюсь посвятить этим вопросам свои следующие статьи.
Итак, начнем сразу с главного ответа на вопрос о том можно ли защитить js код от просмотра. Ответ негативный, пока еще не существует универсального способа позволяющего скрыть код js от любого желающего его посмотреть посетителя. Но, существует масса способов сделать практически невозможным понять логику и читабельность js кода, который можно подвергнуть различного вида ухищренным модификациям.
Короче говоря, его можно сделать непонятным и нечитаемым.
В интернете существует несколько основных способов модификации javascript кода:
- замена имен функций и переменных на случайные;
- удаление комментариев и преобразование скрипта в непрерывную строку;
- шифрование отдельных функций и всего скрипта.
Как вы понимаете, если нельзя защитить свой js код на 100%, то необходимо усложнить его хотя бы на 99%.
Перейдем к инструментам, которые это могут сделать. Существует несколько видов программных средств для усложнения кода javascript:
1. специальные программы для защиты javascript кода (HTMLCrypt, Java Script Mutator, Jasob, HTML Guardian и другие). Такие программы могут шифровать не только javascript код, но и код html, запихивая его в переменные js. К плюсам этого способа защиты можно отнести различные степени шифрования, мощные алгоритмы шифровки, удобство и быстрота. К минусам: не всегда получается кроссбраузерность, программы распространяются не бесплатно.
2. специальные сайты сервисы, на которых Вы можете бесплатно зашифровать свой javascript файл с помощью javascript компрессоров. Наиболее популярными являются:
- http://dean.edwards.name/packer/
- http://javascriptobfuscator.com
- http://sure-in.com/htmlcoder.htm
Плюсами такого способа есть бесплатная возможность и ничем не хуже платных программ степень защиты javascript файлов. Минус: удаленность сервиса, постоянное посещение сайта и новая перекодировка скриптов. Еще, также, в минус можно отнести неизвестный алгоритм использования удаленным javascript компрессора. Кто знает, чем напичкали Ваш файл и не можно ли его спокойно расшифровать другим сервисом с этого сайта.
3. создать самому или скачать php библиотеку (класс), которая будет находится на Вашем сервере и автоматически будет шифровать необходимые javascript файлы. Плюс: бесплатный и понятный js компрессор, который Вы можете использовать по своему усмотрению. Таких библиотек в интернете немного, но Вы можете бесплатно скачать здесь:
- http://joliclic.free.fr/php/javascript-packer/en/
- http://phpclasses.segmenta.ru/browse/package/4818.html
Не трудно понять, что из перечисленных выше способов защиты самым идеальным вариантом будет третий. Ну, а что касается эффективности вышеперечисленного, то про это Вам не смогут сказать даже разработчики этих программ.

Облако тегов / Авторы