Ben web etrafında döşeme bulundu ve biraz tweaked dinamik bir küçük komut dosyası var. Ben eklenen şeylerden biri bir önbelleğe alma mekanizması oldu. Yeni bir başparmak oluşturulur zaman, o diske kaydedilir, ve (tüm aynı seçenekleri ile) aynı resim tekrar talep edilirse, disk kopyalama kullanılacaktır.
A pasajı:
// name of cached file
$thumb_file = $_SERVER['DOCUMENT_ROOT'].'/thumbs/cache/'.
str_replace('/', '_', $_REQUEST['p']).
".{$def_width}x{$def_height}".
($clamp ? '_'.implode('x',$clamp) : '').
($make_png?'.png':'.jpg');
// get it from cache if it's there
if ($use_cache && file_exists($thumb_file)) {
Header("Content-type: image/".($make_png?'png':'jpeg'));
// this part seems really slow
$fp=fopen($thumb_file, "rb");
while (!feof($fp)) print fread($fp, 4096);
exit();
}
Ancak, print
fread
çok yavaş görünüyor ve bazen (çok nadir) görüntüler tamamen yüklenmeyen sonucunu ing.
Peki, bunu nasıl hızlandırabilir? Ben sadece fread
bunu ing yerine görüntüsüne tarayıcı yönlendirme, ya da başka bir seçenek var mıdır?
Ben sadece durumda, aşağıda tam PHP komut dosyası dahil.
<?php
$use_cache = $_REQUEST['nc'] ? false : true;
// $use_cache = false;
$upfile = $_SERVER['DOCUMENT_ROOT'] .'/'. $_REQUEST['p'];
$def_width = $_REQUEST["w"];
$def_height = $_REQUEST["h"];
$clamp = $_REQUEST['c'] ? explode("x",$_REQUEST['c']) : null;
$make_png = $_REQUEST['png'];
if (!file_exists($upfile)) {
die(); // $upfile = "nophoto.jpg";
}
if (!"{$def_width}{$def_height}") {
$def_width = $def_height = '100';
}
// name of cached file
$thumb_file = $_SERVER['DOCUMENT_ROOT'].'/thumbs/cache/'.
str_replace('/', '_', $_REQUEST['p']).
".{$def_width}x{$def_height}".
($clamp ? '_'.implode('x',$clamp) : '').
($make_png?'.png':'.jpg');
// get it from cache if it's there
if ($use_cache && file_exists($thumb_file)) {
Header("Content-type: image/".($make_png?'png':'jpeg'));
$fp=fopen($thumb_file, "rb");
while (!feof($fp)) print fread($fp, 4096);
exit();
}
$ext = strtolower(substr($upfile, -3));
ini_set('memory_limit', '64M');
if ($ext=="gif")
$src = @ImageCreateFromGif ($upfile);
else if ($ext=="jpg")
$src = @ImageCreateFromJpeg($upfile);
else if ($ext=="png")
$src = @ImageCreateFromPng($upfile);
$size = GetImageSize($upfile);
$width = $size[0];
$height = $size[1];
$long_side = $def_width;
if ($def_width < $def_height) $long_side = $def_height;
if (!$def_width) {
$factor_h = $height / $def_height;
$def_width = $width / $factor_h;
}
if (!$def_height) {
$factor_w = $width / $def_width;
$def_height = $height / $factor_w;
}
$factor_w = $width / $def_width;
$factor_h = $height / $def_height;
if ($factor_w > $factor_h) {
$new_height = floor($def_height * $factor_h);
$new_width = floor($def_width * $factor_h);
} else {
$new_height = floor($def_height * $factor_w);
$new_width = floor($def_width * $factor_w);
}
if ((!$clamp[0])&&$clamp[0]!=='0') $clamp[0] = 50;
if ((!$clamp[1])&&$clamp[1]!=='0') $clamp[1] = 50;
$src_x = ceil(($width - $new_width) * ($clamp[0] / 100));
$src_y = ceil(($height - $new_height) * ($clamp[1] / 100));
$dst = ImageCreateTrueColor($def_width, $def_height);
@ImageCopyResampled($dst, $src, 0, 0, $src_x, $src_y,
$def_width, $def_height, $new_width, $new_height);
Header("Content-type: image/".($make_png?'png':'jpeg'));
if ($make_png) {
ImagePng($dst);
if ($use_cache) {
ImagePng($dst, $thumb_file);
}
} else {
ImageJpeg($dst, null, 95);
if ($use_cache) {
ImageJpeg($dst, $thumb_file, 95);
}
}
@ImageDestroy($src);
@ImageDestroy($dst);
?>