Быстрый поиск
Введите фрагмент названия статьи для поиска
Проверка стойкости пароля с помощью подсчета энтропии
18.12.2015 | Категория: Web-мастеру и не только | Автор: ManHunter
Проверка стойкости пароля с помощью подсчета энтропии
Каждому пользователю интернета приходилось регистрироваться на каких-нибудь сайтах или сервисах, и одна из обязательных составляющих любой регистрации - придумывание пароля. Есть даже официальные рекомендации по составлению паролей, не говоря уже о многочисленных статьях на эту тему. Многие сервисы при регистрации пользователя проверяют наличие определенных групп символов в пароле, в результате складывается ситуация, как в верхней половине приведенного здесь комикса. А вот как определить, действительно ли тот или иной пароль является сложным?
Читать статью целиком »
Просмотров: 9807 | Комментариев: 12
Как на PHP корректно прибавить месяц к дате
27.11.2015 | Категория: Web-мастеру и не только | Автор: ManHunter
Как на PHP корректно прибавить месяц к дате
Одна из интересных задач, с которой мне приходилось сталкиваться на практике при работе с датами на PHP, это так называемый "календарный месяц". То есть некий интервал дат, отличающийся на месяц. Если дата находится где-то в середине или в начале месяца, то никаких сложностей, просто увеличиваем номер месяца на единицу, при необходимости корректируем год. А проблема начинается в тех случаях, когда дата начала интервала приходится на какое-нибудь число в конце месяца. Просто увеличить значение месяца на следующий, оставив число без изменений, нельзя, полученная дата может оказаться несуществующей. Добавлять 30 или 31 день тоже некорректно, в коротком феврале итоговая дата после такого прибавления перемахнет на начало марта. Вот для наглядности несколько примеров, чтобы было понятно, о чем идет речь:
Code (PHP) : Убрать нумерацию
- //------------------------------------------------------
- // Дата в начале или в середине месяца
- //------------------------------------------------------
- echo date('d.m.Y',strtotime('2015-01-12 +1 month'));
- // 12.02.2015 - правильно
- //------------------------------------------------------
- // Дата в конце месяца
- //------------------------------------------------------
- echo date('d.m.Y',strtotime('2015-01-29 +1 month'));
- // 01.03.2015 - неправильно! Ожидалось 28.02.2015
- echo date('d.m.Y',strtotime('2015-01-31 +1 month'));
- // 03.03.2015 - неправильно! Ожидалось 28.02.2015
- echo date('d.m.Y',strtotime('2015-11-30 +1 month'));
- // 30.12.2015 - неправильно! Ожидалось 31.12.2015
Читать статью целиком »
Просмотров: 17362 | Комментариев: 6
Определение координат места съемки из EXIF на PHP
08.07.2015 | Категория: Web-мастеру и не только | Автор: ManHunter
Определение координат места съемки из EXIF на PHP
Окончательно решив аппаратную задачу записи GPS-координат в файлы, осталось решить программную задачу их чтения. Вариант на Ассемблере у меня уже давно есть, а вот на PHP нормальных решений не было. Причину, по которой я не пользуюсь штатными функциями PHP, я изложил в предыдущей статье, повторяться не буду. К тому же мне стало интересно самостоятельно распарсить дополнительные секции EXIF, основываясь на их спецификации.
Читать статью целиком »
Просмотров: 5881 | Комментариев: 1
Поворот изображения на основании данных EXIF
02.05.2015 | Категория: Web-мастеру и не только | Автор: ManHunter
Поворот изображения на основании данных EXIF
Сложно представить современный интернет без загруженных фотографий. Это социальные сети, форумы, фотогалереи, фотохостинги и множество других ресурсов и сервисов. В зависимости от композиции, фотографии могут быть как вертикальными, так и горизонтальными. Но ни одна камера технически не в состоянии сделать вертикальный снимок, все без исключения снимки делаются горизонтальными, а ориентация (угол поворота) кадра записывается в секцию EXIF. Программы просмотра считывают эти данные и показывают изображение с нужным углом поворота. При обработке графических файлов средствами PHP, информация об ориентации игнорируется, поэтому при загрузке фотографий на различные сайты полученное изображение может оказаться повернутым, так как именно в таком виде снимок был сделан камерой. Конечно, можно предложить пользователю выполнить предварительную обработку фотографии в каком-нибудь графическом редакторе, но, во-первых, не все пользователи умеют с ними работать, а во-вторых, порой бывает очень сложно объяснить людям, почему у них в программе просмотра все отображается как надо, а после загрузки "все сломалось".
Читать статью целиком »
Просмотров: 10798 | Комментариев: 13
Функция транслитерации русского текста на PHP
26.11.2014 | Категория: Web-мастеру и не только | Автор: ManHunter
Слово "транслитерация" происходит от латинского "transliteratus" ("trans" - "изменение" и "littera" - "буква"). Это метод представления букв одной системы письма либо алфавита буквами другой системы. В быту транслитерация получила широкое распространение для написания SMS в эпоху нерусифицированных сотовых телефонов и для набора текстов на нерусифицированных компьютерах. В Web-строительстве транслитерация обычно используется для создания красивых ЧПУ из заголовков статей и для переименования файлов при их загрузке на сервер.В интернете немало подобных функций на PHP, но они все имеют общий недостаток: преобразования выполняются посимвольно согласно таблице символов замены, при этом заглавные буквы преобразуются без учета их положения в тексте. Для одиночных заглавных букв это не имеет значения, но буквы, транслитерируемые в два и более символа, в этом случае преобразуются с ошибкой. Поясню на примере. Преобразуем в транслит с простой заменой слова "Япония" и "ЮАР", получится "Yaponiya" и "YuAR". Первое слово нормально, а вот аббревиатура исказилась, ведь должно быть "YUAR". Я написал свою функцию транслитерации, которая учитывает местоположение таких составных букв и, в зависимости от этого, преобразует их в последовательность заглавных или только одну заглавную и строчные буквы. Набор символов в таблице транслитерации у меня отличается от ГОСТ 7.79-2000 "Правила транслитерации кирилловского письма латинским алфавитом", если вам потребуется строгое соответствие, то можете доработать функцию самостоятельно.
Code (PHP) : Убрать нумерацию
- //----------------------------------------------------------------------
- // Перевод кириллической строки в транслит и исправление умляутов
- //----------------------------------------------------------------------
- function translit($str, $fix_umlauts=false) {
- // Установить опции и кодировку регулярных выражений
- mb_regex_set_options('pd');
- mb_internal_encoding('UTF-8');
- // Привести строку к UTF-8
- if (strtolower(mb_detect_encoding($str,
- 'utf-8, windows-1251'))=='windows-1251') {
- $str=mb_convert_encoding($str, 'utf-8', 'windows-1251');
- }
- // Регулярки для удобства
- $regexp1='(?=[A-Z0-9А-Я])';
- $regexp2='(?<=[A-Z0-9А-Я])';
- // Массивы для замены заглавных букв, идущих последовательно
- $rus=array(
- '/(Ё'.$regexp1.')|('.$regexp2.'Ё)/u',
- '/(Ж'.$regexp1.')|('.$regexp2.'Ж)/u',
- '/(Ч'.$regexp1.')|('.$regexp2.'Ч)/u',
- '/(Ш'.$regexp1.')|('.$regexp2.'Ш)/u',
- '/(Щ'.$regexp1.')|('.$regexp2.'Щ)/u',
- '/(Ю'.$regexp1.')|('.$regexp2.'Ю)/u',
- '/(Я'.$regexp1.')|('.$regexp2.'Я)/u'
- );
- $eng=array(
- 'YO','ZH','CH','SH','SCH','YU','YA'
- );
- // Заменить заглавные буквы, идущие последовательно
- $str=preg_replace($rus,$eng,$str);
- // Массивы для замены одиночных заглавных и строчных букв
- $rus=array(
- '/а/u','/б/u','/в/u','/г/u','/д/u','/е/u','/ё/u',
- '/ж/u','/з/u','/и/u','/й/u','/к/u','/л/u','/м/u',
- '/н/u','/о/u','/п/u','/р/u','/с/u','/т/u','/у/u',
- '/ф/u','/х/u','/ц/u','/ч/u','/ш/u','/щ/u','/ъ/u',
- '/ы/u','/ь/u','/э/u','/ю/u','/я/u',
- '/А/u','/Б/u','/В/u','/Г/u','/Д/u','/Е/u','/Ё/u',
- '/Ж/u','/З/u','/И/u','/Й/u','/К/u','/Л/u','/М/u',
- '/Н/u','/О/u','/П/u','/Р/u','/С/u','/Т/u','/У/u',
- '/Ф/u','/Х/u','/Ц/u','/Ч/u','/Ш/u','/Щ/u','/Ъ/u',
- '/Ы/u','/Ь/u','/Э/u','/Ю/u','/Я/u'
- );
- $eng=array(
- 'a','b','v','g','d','e','yo',
- 'zh','z','i','y','k','l','m',
- 'n','o','p','r','s','t','u',
- 'f','h','c','ch','sh','sch','',
- 'i','','e','yu','ya',
- 'A','B','V','G','D','E','Yo',
- 'Zh','Z','I','Y','K','L','M',
- 'N','O','P','R','S','T','U',
- 'F','H','C','Ch','Sh','Sch','',
- 'I','','E','Yu','Ya'
- );
- // Заменить оставшиеся заглавные и строчные буквы
- $str=preg_replace($rus,$eng,$str);
- // Исправление умляутов и других надсимвольных значков
- if ($fix_umlauts) {
- $str=preg_replace('/&(.)(tilde|uml);/',"$1",
- mb_convert_encoding($str,'HTML-ENTITIES','utf-8'));
- }
- return $str;
- }
Читать статью целиком »
Просмотров: 7510 | Комментариев: 6