当前位置: 动力学知识库 > 问答 > 编程问答 >

php - Internal Server Error after ini_set('memory_limit', '512M');

问题描述:

After setting the memory_limit with php, I alwasy get an 500 Internal Server Error. I have no idea why, but if I don't my script gives me

Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

Any ideas how to solve this?

The script I'm using is to round the corners of an image (transparent corners)

<?php

function imageCreateCorners($sourceImageFile, $radius) {

# test source image

if (file_exists($sourceImageFile)) {

$res = is_array($info = getimagesize($sourceImageFile));

}

else $res = false;

# open image

if ($res) {

$w = $info[0];

$h = $info[1];

switch ($info['mime']) {

case 'image/jpeg': $src = imagecreatefromjpeg($sourceImageFile);

break;

case 'image/gif': $src = imagecreatefromgif($sourceImageFile);

break;

case 'image/png': $src = imagecreatefrompng($sourceImageFile);

break;

default:

$res = false;

}

}

# create corners

if ($res) {

$q = 10; # change this if you want

$radius *= $q;

# find unique color

do {

$r = rand(0, 255);

$g = rand(0, 255);

$b = rand(0, 255);

}

while (imagecolorexact($src, $r, $g, $b) < 0);

$nw = $w*$q;

$nh = $h*$q;

$img = imagecreatetruecolor($nw, $nh);

$alphacolor = imagecolorallocatealpha($img, $r, $g, $b, 127);

imagealphablending($img, false);

imagesavealpha($img, true);

imagefilledrectangle($img, 0, 0, $nw, $nh, $alphacolor);

imagefill($img, 0, 0, $alphacolor);

imagecopyresampled($img, $src, 0, 0, 0, 0, $nw, $nh, $w, $h);

imagearc($img, $radius-1, $radius-1, $radius*2, $radius*2, 180, 270, $alphacolor);

imagefilltoborder($img, 0, 0, $alphacolor, $alphacolor);

imagearc($img, $nw-$radius, $radius-1, $radius*2, $radius*2, 270, 0, $alphacolor);

imagefilltoborder($img, $nw-1, 0, $alphacolor, $alphacolor);

imagearc($img, $radius-1, $nh-$radius, $radius*2, $radius*2, 90, 180, $alphacolor);

imagefilltoborder($img, 0, $nh-1, $alphacolor, $alphacolor);

imagearc($img, $nw-$radius, $nh-$radius, $radius*2, $radius*2, 0, 90, $alphacolor);

imagefilltoborder($img, $nw-1, $nh-1, $alphacolor, $alphacolor);

imagealphablending($img, true);

imagecolortransparent($img, $alphacolor);

# resize image down

$dest = imagecreatetruecolor($w, $h);

imagealphablending($dest, false);

imagesavealpha($dest, true);

imagefilledrectangle($dest, 0, 0, $w, $h, $alphacolor);

imagecopyresampled($dest, $img, 0, 0, 0, 0, $w, $h, $nw, $nh);

# output image

$res = $dest;

imagedestroy($src);

imagedestroy($img);

}

return $res;

}

imagepng(imageCreateCorners('img.jpg', 13), 'test.png');

?>

网友答案:

I agree with @DaveRandom I got the same error as you with $q at 10 when i put a 1024x768 image it tried to create 10240x7680 which equals an image with size 78 megapixel with RGB that becomes almost 240MB

When I set the $q to 1 the code ran fine, and the resulting image had the corners cut nicely.

网友答案:

You are trying to allocate too much memory. Try cutting it in half until you stop having server errors.

分享给朋友:
您可能感兴趣的文章:
随机阅读: