Быстрый поиск
Введите фрагмент названия статьи для поиска
Градиентный фон на PHP
31.07.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Градиентный фон на PHP
Продолжаем работать с графикой на PHP. Сегодня будем рисовать градиентную заливку фона, когда один цвет плавно перетекает в другой.
Читать статью целиком »
Просмотров: 1891 | Комментариев: 1
Как узнать размер базы MySQL
18.06.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Как узнать размер базы MySQL
Иногда бывает нужным прикинуть размер базы MySQL, который занимает ваш проект. Например, чтобы не вылезти за ограничения хостинга или вовремя обнаружить аномальное разрастание базы в случае программной ошибки, да или просто для спортивного интереса.
Читать статью целиком »
Просмотров: 1460 | Комментариев: 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-файлы на наличие в них вредоносного кода. Из всех эксплойтов, которые я встречал внедренными в гифки, не прошел ни один. Если вдруг найдете образец зловреда, который не обнаруживается этой функцией, то пришлите его мне, пожалуйста, я с удовольствием доработаю проверку.
Просмотров: 1256 | Комментариев: 6
Почему символ PHP - слон?
27.03.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Почему символ PHP - слон?
Если вы читаете околокомпьютерные сайты и блоги, то наверняка обращали внимание, что статьи о языке программирования PHP часто сопровождаются картинками в виде симпатичного слона синего цвета с надписью "PHP" на боку. Что это за слон и откуда он взялся?
Читать статью целиком »
Просмотров: 10183 | Комментариев: 9
Генерация случайных значений на 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).' ';
- }
Просмотров: 1844 | Комментариев: 1