我有一个简单的脚本,用于水印链接。最近它开始吃掉CPU(有时一个用户的CPU使用率达到12%!)。如何最大限度地降低CPU使用率?
set_time_limit ( 3 );
if(!empty($_GET['e'])){
$data = getimagesize("images/".$_GET['e']);
// create base image
$base_image = imagecreatetruecolor($data[0],$data[1]);
$photo = imagecreatefromjpeg("images/".$_GET['e']);
$top_image = imagecreatefrompng('watermark.png');
imagesavealpha($top_image, true);
imagealphablending($top_image, true);
imagesavealpha($base_image, true);
imagealphablending($base_image, true);
$data2 = getimagesize('watermark.png');
// merge images
imagecopy($base_image, $photo, 0, 0, 0, 0, $data[0], $data[1]);
imagecopy($base_image, $top_image, 0, 0, 0, 0, $data2[0], $data2[1]);
// return file
header('Content-Type: image/png');
imagepng($base_image);
} else
header('Location: http://www.mydomain.com/');
答案 0 :(得分:2)
@mikew打扰我说...缓存水印图像。
这个的简单实现是
// get the file extension and set some convience variables
$ext = substr($_GET["e"], strrpos($_GET["e"], ".")+1);
$cacheFile = "images/wm/".$_GET['e'];
$srcFile = "images/".$GET["e"];
// check to see if the file exists in the watermark directory
if (!file_exists($cacheFile)){
// do sweet image processing magic if cache file doesn't exist and create the cache file
$data = getimagesize($srcFile);
// create base image
$base_image = imagecreatetruecolor($srcFile);
$photo = imagecreatefromjpeg($srcFile);
$top_image = imagecreatefrompng('watermark.png');
imagesavealpha($top_image, true);
imagealphablending($top_image, true);
imagesavealpha($base_image, true);
imagealphablending($base_image, true);
$data2 = getimagesize('watermark.png');
// merge images
imagecopy($base_image, $photo, 0, 0, 0, 0, $data[0], $data[1]);
imagecopy($base_image, $top_image, 0, 0, 0, 0, $data2[0], $data2[1]);
switch($ext){
case "jpg":
case "jpeg":
header("Content-Type: image/jpeg");
imagejpeg($base_image, $cacheFile);
break;
case "png":
header("Content-Type: image/png");
imagepng($base_image, $cacheFile);
break;
}
}
// output the cached file.
readfile($cacheFile);