Blog. Just Blog

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

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

Как узнать размер базы MySQL

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

Как узнать размер базы MySQL

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

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

Получение реального формата изображения

08.04.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Одно из основных правил при разработке web-приложений - не доверять никаким данным, полученным от пользователя. Они могут быть перепутаны случайно, но могут быть специально модифицированы в злонамеренных целях. Это касается в том числе и загружаемых изображений. Чтобы применять к ним функции типа ImageCreateFromXXX, просто ориентироваться на расширение файла недостаточно, оно запросто может не соответствовать содержимому. Для определения реального типа изображения я всегда проверяю внутренний формат файла, его служебные заголовки, и только на основании этого принимаю решение, как обрабатывать этот файл. Для этого у меня написана вот такая функция:
  1. //-------------------------------------------------------------------
  2. // Функция получения реального формата изображения
  3. // (C) ManHunter / PCL
  4. // http://www.manhunter.ru
  5. //-------------------------------------------------------------------
  6. function get_real_image_type($file_path) {
  7.   // По умолчанию файл имеет неизвестный формат
  8.   $type=false;
  9.  
  10.   // Анализ по внутренней структуре файла
  11.   if ($f=fopen($file_path,'r')) {
  12.     $data=fread($f,20);
  13.     fclose($f);
  14.     // Заголовок файла GIF
  15.     if (substr($data,0,3)=='GIF'
  16.       && (substr($data,12,1)=="\x00" 
  17.       || substr($data,12,1)=="\x01")) {
  18.       // Проверка на классические сплойты
  19.       if (strpos(substr($data,6,4),'/*')!==false 
  20.         || strpos(substr($data,6,4),'//')!==false) {
  21.         $type=false;
  22.       }
  23.       else {
  24.         // Проверка на более хитрые сплойты
  25.         $tmp=preg_replace('/[^\("\']/','',substr($data,6,4));
  26.         if ($tmp=='("' || $tmp=='(\'') {
  27.           $type=false;
  28.         }
  29.         else {
  30.           $type='gif';
  31.         }
  32.       }
  33.     }
  34.     // Заголовок файла PNG
  35.     elseif (substr($data,0,8)==chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
  36.       $type='png';
  37.     }
  38.     // Заголовок файла JPEG
  39.     elseif (substr($data,0,3)==chr(255).chr(216).chr(255)) {
  40.       $type='jpg';
  41.     }
  42.   }
  43.   return $type;
  44. }
Единственный параметр $file_path - путь к проверяемому файлу. На выходе строка с реальным типом изображения или false, если файл не является изображением.

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

Просмотров: 629 | Комментариев: 5

Почему символ PHP - слон?

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

Почему символ PHP - слон?

Если вы читаете околокомпьютерные сайты и блоги, то наверняка обращали внимание, что статьи о языке программирования PHP часто сопровождаются картинками в виде симпатичного слона синего цвета с надписью "PHP" на боку. Что это за слон и откуда он взялся?

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

Текст с наложением тени с помощью CSS

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

Текст с наложением тени с помощью CSS

Симпатичный эффект на чистом CSS для создания красивых заголовков. Буквы с тенью накладываются друг на друга с небольшим смещением. В зависимости от шрифта смещение letter-spacing придется подрегулировать.
  1. <style type="text/css">
  2. .header div {
  3.     displayinline-block;
  4.     font-familyGeorgia;
  5.     font-size72px;
  6.     font-weightbold;
  7.     color#FFFFFF;
  8.     letter-spacing: -12px;
  9.     text-shadow: -3px 0px 5px #000000;
  10. }
  11. </style>
Верстка получается немного громоздкой, так как каждую букву текста приходится оборачивать в отдельный тег.
  1. <div class="header">
  2.     <div>C</div>
  3.     <div>S</div>
  4.     <div>S</div>
  5.     <div>&nbsp;&nbsp;&nbsp;</div>
  6.     <div>i</div>
  7.     <div>s</div>
  8.     <div>&nbsp;&nbsp;&nbsp;</div>
  9.     <div>A</div>
  10.     <div>w</div>
  11.     <div>e</div>
  12.     <div>s</div>
  13.     <div>o</div>
  14.     <div>m</div>
  15.     <div>e</div>
  16. </div>
Готовый пример вы можете посмотреть на демонстрационной странице.

Просмотров: 587 | Комментариев: 2

Генерация случайных значений на PHP с заданной вероятностью

11.01.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Понадобилась функция, которая возвращает случайный элемент из определенного набора. Вроде бы простейшее решение в одну строчку. Но особенность задачи такова, что элементы должны появляться не просто случайно, а с определенной вероятностью: какие-то чаще, какие-то реже. То есть у каждого значения имеется весовой коэффициент, влияющий на частоту его появления. Например:
  1. // Массив значений и весовых коэффициентов
  2. $data=array(
  3.     'купить'=>50,
  4.     'заказать'=>5,
  5.     'приобрести'=>30,
  6. );
Для такого набора данных чаще всего должно появляться слово "купить", чуть реже "приобрести" и в очень редких случаях может проскакивать вариант "заказать". Готовая функция получилась следующей:
  1. //-------------------------------------------------------------
  2. // Получение случайного значения с заданной вероятностью
  3. //-------------------------------------------------------------
  4. function smart_rand($data) {
  5.     // Пустой массив не обрабатываем
  6.     if (count($data)==0) { return false; }
  7.  
  8.     // Отсортировать массив с сохранением ключей
  9.     arsort($data);
  10.  
  11.     // Сформировать массив с интервалами
  12.     $max_rand=0;
  13.     $weights=array();
  14.     foreach ($data as $key=>$value) {
  15.         $max_rand+=$value;
  16.         $weights[$max_rand]=$key;
  17.     }
  18.  
  19.     // Случайное число от 0 до суммы всех весовых коэффициентов
  20.     $rand=mt_rand(0,$max_rand);
  21.  
  22.     // Найти интервал, в который попадает случайное число
  23.     foreach ($weights as $key=>$value) {
  24.         if ($rand<=$key) {
  25.             break;
  26.         }
  27.     }
  28.     return $value;
  29. }
На входе передается массив значений с весовыми коэффициентами, на выходе одно из значений. Пример использования:
  1. // Вывести 100 вариантов написания
  2. for($i=0$i<100$i++) {
  3.     echo smart_rand($data).' ';
  4. }
Числовые значения весовых коэффициентов могут быть любыми и следовать в произвольном порядке, их количество также ничем не ограничено.

Просмотров: 836 | Комментариев: 1

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