
Быстрый поиск
Введите фрагмент названия статьи для поиска
Как узнать размер базы MySQL
18.06.2019 | Категория: Web-мастеру и не только | Автор: ManHunter

Как узнать размер базы MySQL
Иногда бывает нужным прикинуть размер базы MySQL, который занимает ваш проект. Например, чтобы не вылезти за ограничения хостинга или вовремя обнаружить аномальное разрастание базы в случае программной ошибки, да или просто для спортивного интереса.
Читать статью целиком »
Просмотров: 1673 | Комментариев: 0
Получение реального формата изображения
08.04.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Одно из основных правил при разработке web-приложений - не доверять никаким данным, полученным от пользователя. Они могут быть перепутаны случайно, но могут быть специально модифицированы в злонамеренных целях. Это касается в том числе и загружаемых изображений. Чтобы применять к ним функции типа ImageCreateFromXXX, просто ориентироваться на расширение файла недостаточно, оно запросто может не соответствовать содержимому. Для определения реального типа изображения я всегда проверяю внутренний формат файла, его служебные заголовки, и только на основании этого принимаю решение, как обрабатывать этот файл. Для этого у меня написана вот такая функция:Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------------
- // Функция получения реального формата изображения
- // (C) ManHunter / PCL
- // https://www.manhunter.ru
- //-------------------------------------------------------------------
- function get_real_image_type($file_path) {
- // По умолчанию файл имеет неизвестный формат
- $type=false;
- // Анализ по внутренней структуре файла
- if ($f=fopen($file_path,'r')) {
- $data=fread($f,20);
- fclose($f);
- // Заголовок файла GIF
- if (substr($data,0,3)=='GIF'
- && (substr($data,12,1)=="\x00"
- || substr($data,12,1)=="\x01")) {
- // Проверка на классические сплойты
- if (strpos(substr($data,6,4),'/*')!==false
- || strpos(substr($data,6,4),'//')!==false) {
- $type=false;
- }
- else {
- // Проверка на более хитрые сплойты
- $tmp=preg_replace('/[^\("\']/','',substr($data,6,4));
- if ($tmp=='("' || $tmp=='(\'') {
- $type=false;
- }
- else {
- $type='gif';
- }
- }
- }
- // Заголовок файла PNG
- elseif (substr($data,0,8)==chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
- $type='png';
- }
- // Заголовок файла JPEG
- elseif (substr($data,0,3)==chr(255).chr(216).chr(255)) {
- $type='jpg';
- }
- // Заголовок файла BMP
- elseif (substr($data,0,2)=='BM') {
- $type='bmp';
- }
- // Заголовок файла WebP
- elseif (substr($data,0,4)=='RIFF' && substr($data,8,4)=='WEBP') {
- $type='webp';
- }
- }
- return $type;
- }
Кроме определения типа изображения функция также проверяет GIF-файлы на наличие в них вредоносного кода. Из всех эксплойтов, которые я встречал внедренными в гифки, не прошел ни один. Если вдруг найдете образец зловреда, который не обнаруживается этой функцией, то пришлите его мне, пожалуйста, я с удовольствием доработаю проверку.
Просмотров: 1531 | Комментариев: 6
Почему символ PHP - слон?
27.03.2019 | Категория: Web-мастеру и не только | Автор: ManHunter

Почему символ PHP - слон?
Если вы читаете околокомпьютерные сайты и блоги, то наверняка обращали внимание, что статьи о языке программирования PHP часто сопровождаются картинками в виде симпатичного слона синего цвета с надписью "PHP" на боку. Что это за слон и откуда он взялся?
Читать статью целиком »
Просмотров: 12982 | Комментариев: 11
Генерация случайных значений на PHP с заданной вероятностью
11.01.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Понадобилась функция, которая возвращает случайный элемент из определенного набора. Вроде бы простейшее решение в одну строчку. Но особенность задачи такова, что элементы должны появляться не просто случайно, а с определенной вероятностью: какие-то чаще, какие-то реже. То есть у каждого значения имеется весовой коэффициент, влияющий на частоту его появления. Например:Code (PHP) : Убрать нумерацию
- // Массив значений и весовых коэффициентов
- $data=array(
- 'купить'=>50,
- 'заказать'=>5,
- 'приобрести'=>30,
- );
Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------
- // Получение случайного значения с заданной вероятностью
- //-------------------------------------------------------------
- function smart_rand($data) {
- // Пустой массив не обрабатываем
- if (count($data)==0) { return false; }
- // Отсортировать массив с сохранением ключей
- arsort($data);
- // Сформировать массив с интервалами
- $max_rand=0;
- $weights=array();
- foreach ($data as $key=>$value) {
- $max_rand+=$value;
- $weights[$max_rand]=$key;
- }
- // Случайное число от 0 до суммы всех весовых коэффициентов
- $rand=mt_rand(0,$max_rand);
- // Найти интервал, в который попадает случайное число
- foreach ($weights as $key=>$value) {
- if ($rand<=$key) {
- break;
- }
- }
- return $value;
- }
Code (PHP) : Убрать нумерацию
- // Вывести 100 вариантов написания
- for($i=0; $i<100; $i++) {
- echo smart_rand($data).' ';
- }
Просмотров: 2197 | Комментариев: 1
Рамка для фото в виде смартфона
25.11.2018 | Категория: Web-мастеру и не только | Автор: ManHunter

Рамка для фото в виде смартфона
Для одной презентации понадобилось достаточно большое количество картинок, на которых представлены скриншоты мобильной версии продукта. С самими картинками проблем не возникло, нащелкали на смартфонах сколько надо скриншотов. Согласно поставленной задаче, для пущей убедительности картинки должны быть, так сказать, "в интерьере", то есть как будто отрисованные на экране смартфонов. Конечно, фотошоп никто не отменял, можно было заморочиться и наделать все ручками, но программистское мышление взяло вверх. Как верно подметил герой одного старого мультика, "лучше день потерять, зато потом за пять минут долететь".
Читать статью целиком »
Просмотров: 2928 | Комментариев: 4


