Blog. Just Blog

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

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

Градиентный фон на PHP

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

Градиентный фон на PHP

Продолжаем работать с графикой на PHP. Сегодня будем рисовать градиентную заливку фона, когда один цвет плавно перетекает в другой.

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

Получение всех функций JavaScript на странице

21.07.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Иногда в процессе разработки появляются странные задачи. Вот и на этот раз возникла необходимость узнать все пользовательские функции JavaScript, которые задействованы на странице. Немного колдунства и получился вот такой код:
  1. (function() {
  2.     var source;
  3.     for (var method in window) {
  4.         if (typeof window[method]=="function" && window.hasOwnProperty(method)) {
  5.             // Текст функции
  6.             source=Function.prototype.toString.call(eval(method));
  7.             // Пропускаем нативные функции
  8.             if ((/\{\s*\[native code\]\s*\}/).test(source)) { continue; }
  9.             // Вывести название и текст функции
  10.             document.write('<pre>');
  11.             document.write('<div><b>'+method+'</b>:</div>');
  12.             document.write(source);
  13.             document.write('</pre>');
  14.         }
  15.     }
  16. }());
На выходе вы получите список всех функций за исключением нативных. Определение нативных функций предельно простое, делалось под конкретную задачу, если надо чтобы было красиво, то вам сюда. Пример работы скрипта вы можете посмотреть на демонстрационной странице.

Просмотров: 630 | Комментариев: 0

Разделенные ссылки

02.07.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Разделенные ссылки - очень интересный визуальный эффект для оформления вашего сайта. Суть разделенных ссылок заключается в том, что одна ссылка имеет одновременно несколько активных областей, которые могут находиться вообще в разных местах страницы. Например:


Разделенные ссылки

При наведении курсора на название альбома также подсвечивается его обложка в левом блоке, а при наведении на любую из обложек будет подсвечено название соответствующего альбома. Никаких скриптов для этого не требуется, все реализуется средствами CSS.

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

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

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

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

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

Читать статью целиком »
Просмотров: 786 | Комментариев: 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-файлы на наличие в них вредоносного кода. Из всех эксплойтов, которые я встречал внедренными в гифки, не прошел ни один. Если вдруг найдете образец зловреда, который не обнаруживается этой функцией, то пришлите его мне, пожалуйста, я с удовольствием доработаю проверку.

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

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