Blog. Just Blog

Web-мастеру и не только

Полезные решения для Web-мастеров
Web-мастеру и не только - RSS-канал Web-мастеру и не только - Карта сайта

Работа с недокументированными API WHM и cPanel

20.10.2008 | Категория: Web-мастеру и не только | Автор: ManHunter

Работа с недокументированными API WHM и cPanel

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

Читать статью целиком »
Просмотров: 8439 | Комментариев: 9

Проверка похожести двух слов

11.10.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Точное сравнение двух символьных строк, даже регистронезависимое, выполнить нетрудно. А как быть, если в одной их них встречаются символы другого алфавита, похожие по написанию? Так, буква "E" в русской и английской раскладке имеет одинаковое написание, или вместо русской "Н(н)" можно написать английскую "H(h)". Этим могут воспользоваться всякие ублюдки, например оставить сообщение на форуме якобы от администрации, зарегистрировав ник, внешне похожий на ник одного из админов. Для проверки похожести двух строк я использую следующую функцию:
  1. // -----------------------------------------------------
  2. // Функция проверки похожести двух слов
  3. // Параметры: $name1 и $name2 - слова для проверки
  4. // $register = TRUE - проверка регистронезависима
  5. //           = FALSE - проверка с учетом регистра
  6. // На выходе: TRUE - слова похожи, FALSE - отличаются
  7. // -----------------------------------------------------
  8. function chk_similarity($word1$word2$register=false) {
  9.   // Очистить слова от служебных символов
  10.   $word1=eregi_replace("[^0-9a-zа-я]","",$word1);
  11.   $word2=eregi_replace("[^0-9a-zа-я]","",$word2);
  12.  
  13.   // Возврат FALSE если длина слов различается
  14.   // или хотя бы одно из них пустое
  15.   if ((strlen($word1)!==strlen($word2)) || strlen($word1)*strlen($word2)==0) {
  16.     return false;
  17.   }
  18.  
  19.   // Заполнить таблицу соответствий
  20.   $pattern1="";
  21.   $pattern2=Array();
  22.  
  23.   $pattern1.="aа";
  24.   $pattern2[]="[аa]";
  25.   $pattern2[]="[аa]";
  26.  
  27.   $pattern1.="AА";
  28.   $pattern2[]="[АA]";
  29.   $pattern2[]="[АA]";
  30.  
  31.   $pattern1.="BВ";
  32.   $pattern2[]="[BВ]";
  33.   $pattern2[]="[BВ]";
  34.  
  35.   $pattern1.="bь";
  36.   $pattern2[]="[bь]";
  37.   $pattern2[]="[bь]";
  38.  
  39.   $pattern1.="cс";
  40.   $pattern2[]="[cс]";
  41.   $pattern2[]="[cс]";
  42.  
  43.   $pattern1.="CС";
  44.   $pattern2[]="[CС]";
  45.   $pattern2[]="[CС]";
  46.  
  47.   $pattern1.="eе";
  48.   $pattern2[]="[eе]";
  49.   $pattern2[]="[eе]";
  50.  
  51.   $pattern1.="EЕ";
  52.   $pattern2[]="[EЕ]";
  53.   $pattern2[]="[EЕ]";
  54.  
  55.   $pattern1.="HН";
  56.   $pattern2[]="[HН]";
  57.   $pattern2[]="[HН]";
  58.  
  59.   $pattern1.="iI1l";
  60.   $pattern2[]="[iI1l]";
  61.   $pattern2[]="[iI1l]";
  62.   $pattern2[]="[iI1l]";
  63.   $pattern2[]="[iI1l]";
  64.  
  65.   $pattern1.="kк";
  66.   $pattern2[]="[kк]";
  67.   $pattern2[]="[kк]";
  68.  
  69.   $pattern1.="KК";
  70.   $pattern2[]="[KК]";
  71.   $pattern2[]="[KК]";
  72.  
  73.   $pattern1.="MМ";
  74.   $pattern2[]="[MМ]";
  75.   $pattern2[]="[MМ]";
  76.  
  77.   $pattern1.="nп";
  78.   $pattern2[]="[nп]";
  79.   $pattern2[]="[nп]";
  80.  
  81.   $pattern1.="oо0";
  82.   $pattern2[]="[oо0]";
  83.   $pattern2[]="[oо0]";
  84.   $pattern2[]="[oо0]";
  85.  
  86.   $pattern1.="OО0";
  87.   $pattern2[]="[OО0]";
  88.   $pattern2[]="[OО0]";
  89.   $pattern2[]="[OО0]";
  90.  
  91.   $pattern1.="pр";
  92.   $pattern2[]="[pр]";
  93.   $pattern2[]="[pр]";
  94.  
  95.   $pattern1.="PР";
  96.   $pattern2[]="[PР]";
  97.   $pattern2[]="[PР]";
  98.  
  99.   $pattern1.="rг";
  100.   $pattern2[]="[rг]";
  101.   $pattern2[]="[rг]";
  102.  
  103.   $pattern1.="TТ";
  104.   $pattern2[]="[TТ]";
  105.   $pattern2[]="[TТ]";
  106.  
  107.   $pattern1.="uи";
  108.   $pattern2[]="[uи]";
  109.   $pattern2[]="[uи]";
  110.  
  111.   $pattern1.="xх";
  112.   $pattern2[]="[xх]";
  113.   $pattern2[]="[xх]";
  114.  
  115.   $pattern1.="XХ";
  116.   $pattern2[]="[XХ]";
  117.   $pattern2[]="[XХ]";
  118.  
  119.   $pattern1.="yу";
  120.   $pattern2[]="[yу]";
  121.   $pattern2[]="[yу]";
  122.  
  123.   $pattern1.="YУ";
  124.   $pattern2[]="[YУ]";
  125.   $pattern2[]="[YУ]";
  126.  
  127.   $pattern1.="З3";
  128.   $pattern2[]="[З3]";
  129.   $pattern2[]="[З3]";
  130.  
  131.   $pattern1.="ч4";
  132.   $pattern2[]="[ч4]";
  133.   $pattern2[]="[ч4]";
  134.  
  135.   $pattern1.="Ч4";
  136.   $pattern2[]="[Ч4]";
  137.   $pattern2[]="[Ч4]";
  138.  
  139.   // Составить регулярное выражение для проверки
  140.   $tmp="^";
  141.   for ($i=0$i<strlen($word1); $i++) {
  142.     $letter=$word1[$i];
  143.     $pos=strpos($pattern1,$letter);
  144.     if ($pos===false) {
  145.       $tmp.=$letter;
  146.     }
  147.     else {
  148.       $tmp.=$pattern2[$pos];
  149.     }
  150.   }
  151.   $tmp.="$";
  152.  
  153.   // Возврат TRUE - слова похожи или равны
  154.   // FALSE - слова отличаются
  155.   return($register?eregi($tmp,$word2):ereg($tmp,$word2));
  156. }
Примеры использования:

Читать статью целиком »
Просмотров: 5120 | Комментариев: 14

Защита PHP-скриптов от анализа и модификации

06.10.2008 | Категория: Web-мастеру и не только | Автор: ManHunter

Защита PHP-скриптов от анализа и модификации

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

Читать статью целиком »
Просмотров: 42024 | Комментариев: 36

Подсчет времени генерации страницы сайта

25.09.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Очевидно, что время генерации страницы - это разница от момента обработки первой строчки скрипта до момента обработки последней строчки. Для его расчета точности функции time() недостаточно, так как ее шаг равен 1 секунде. Страница же на сервере обычно генерируется за меньшее время. Если это не так, то стоит всерьез озадачиться оптимизацией вашего кода или сменой хостинг-провайдера. Для замеров более коротких интервалов времени в PHP существует функция microtime(). Она возвращает в виде строки текущее время с микросекундами, например:

0.57975400 1222376863

Значит для подсчета времени требуется получить значения microtime() в начале и конце работы скрипта и отобразить разницу между ними. Для выделения из строки числовых значений воспользуемся функцией explode().
  1. <?
  2. // Начало скрипта
  3.  
  4. // Получаем текущее время с микросекундами
  5. $mtime=explode(" ",microtime());
  6. // После выполнения команды explode() массив $mtime содержит значения:
  7. // $mtime[0] - микросекунды, $mtime[1] - секунды
  8. $tstart=$mtime[1]+$mtime[0]; // Засекаем начальное время
  9.  
  10. ...
  11. ...
  12. // Основной код скрипта
  13. ...
  14. ...
  15.  
  16. // Получаем текущее время с микросекундами
  17. $mtime=explode(" ",microtime());
  18. // Уже знакомая нам функция explode()
  19. $tend=$mtime[1]+$mtime[0]; // Засекаем конечное время
  20. // Округляем до двух знаков после запятой
  21. $totaltime=round(($tend-$tstart),2);
  22. // Результат на экран
  23. echo "Время генерации страницы: ".$totaltime." сек.";
  24.  
  25. // Конец скрипта
  26. ?>
Рабочий пример вы можете посмотреть в самом низу этого сайта.

Читать статью целиком »
Просмотров: 9081 | Комментариев: 5

Сейчас на сайте 2 гостей и 3 новостей

23.09.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Смешно звучит, правда? А ведь такие уродливые сочетания встречаются на очень многих сайтах. И если в английском языке достаточно написать что-то типа day(s), byte(s) и это будет смотреться вполне нормально, то в русском языке в конструкциях "число + слово" обязательно придется учитывать склонения. Безумные извраты типа "гостя(ей)" и "новость(ей)" я даже не рассматриваю, за такое надо лишать доступа к компьютеру навсегда.

Чтобы писать по-русски на своих сайтах я использую такую универсальную функцию:
  1. function num2word($num,$words) {
  2.   $num=$num%100;
  3.   if ($num>19) { $num=$num%10; }
  4.   switch ($num) {
  5.     case 1:  { return($words[0]); }
  6.     case 2:
  7.     case 3:
  8.     case 4:  { return($words[1]); }
  9.     default: { return($words[2]); }
  10.   }
  11. }
Параметры вызова: $num - число, $words - массив склонений нужного слова. Как формируется массив вы можете посмотреть на примерах.

Читать статью целиком »
Просмотров: 6134 | Комментариев: 13

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2026
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0021 сек.) / Память: 4.5 Mb
Наверх