<?php
//error_reporting(E_ALL & ~E_NOTICE);
error_reporting(0);
$root_dir = getcwd();
$orig_dir = $root_dir."/uploads/";
$cache_dir = $root_dir."/uploads/cache/";
$max_size = intval($_GET['w']);
$filename = $_GET['file'];
$fileinfo = pathinfo($filename);
$sourcefile = $orig_dir.$filename;
if (!file_exists($sourcefile)) error();
$cachedir = $cache_dir."/".$fileinfo['dirname'];
if (!is_dir($cachedir)) mkdir($cachedir, 777, true);
$cachefile = $cachedir."/".$fileinfo['basename']."_".$max_size.".".$fileinfo['extension'];
if ((file_exists($cachefile))&&(filemtime($sourcefile)<filemtime($cachefile))) {
$params = @getimagesize($sourcefile);
switch ( $params[2] ) {
case 1: $source = header("Content-type: image/gif"); break;
case 2: $source = header("Content-type: image/jpeg"); break;
case 3: $source = header("Content-type: image/png"); break;
}
echo file_get_contents($cachefile);
}
else {
$params = @getimagesize($sourcefile);
if (($params[2]<1)||($params[2]>3)) error();
switch ( $params[2] ) {
case 1: $source = imagecreatefromgif($sourcefile); break;
case 2: $source = imagecreatefromjpeg($sourcefile); break;
case 3: $source = imagecreatefrompng($sourcefile); break;
}
if ($params[0]>$max_size) {
$resource_width = floor($max_size);
$resource_height = floor($params[1] * $max_size / $params[0]);
# создание "подкладки"
$resource = imagecreatetruecolor($resource_width, $resource_height);
# изменение размера и копирование полученного на "подкладку"
imagecopyresampled($resource, $source, 0, 0, 0, 0, $resource_width, $resource_height, $params[0], $params[1]);
}
# если изменять размер не надо просто присваиваем переменной $resource идентификатор оригинальной картинки
else $resource = $source;
switch ($fileinfo['extension']) {
case "jpg":
imagejpeg ($resource, $cachefile, 80);
header("Content-type: image/jpeg");
imagejpeg ($resource, "", 80);
break;
case "jpeg":
imagejpeg ($resource, $cachefile, 80);
header("Content-type: image/jpeg");
imagejpeg ($resource, "", 80);
break;
case "png":
imagepng ($resource, $cachefile);
header("Content-type: image/png");
imagepng ($resource);
break;
case "gif":
imagegif ($resource, $cachefile);
header("Content-type: image/gif");
imagegif ($resource, "");
break;
}
}
function error() {
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
die();
}
?>