【问题标题】:Excution timeout error while create image by php and imagick通过php和imagick创建图像时执行超时错误
【发布时间】:2012-10-18 15:25:22
【问题描述】:

我需要从服务器端创建验证码。我使用 php+imagick 扩展。有时我在创建图像时会发现 500 错误,尽管它大部分时间都可以正常工作。 代码如下:

$Imagick = new Imagick();
$Imagick->newImage( $w, $h, $bg );

$ImagickDraw = new ImagickDraw();
$ImagickDraw->setFont(...);
$ImagickDraw->setFontSize( ... );
$ImagickDraw->setFillColor(...);

$Imagick->borderImage('black', 1, 1);
$Imagick->annotateImage($ImagickDraw, 12, 34, $angles[rand(0, count($angles)-1)], $code);
$Imagick->swirlImage( 10 );

for($i=0; $i<20; $i++) {
  $ImagickDraw->line( mt_rand( 1, $w-1 ), mt_rand(1, $h-1), mt_rand(1, $w-1), mt_rand(1, $h-1) );
}

for ($i=0; $i<30; $i++) {
  $ImagickDraw->color( mt_rand(1, $w-1), mt_rand(1, $h-1), 0);
}

$Imagick->drawImage( $ImagickDraw );

错误日志在最后一行报告“Maximum execution time of 30 seconds exceeded”

$Imagick->drawImage( $ImagickDraw ). 

有人遇到过这样的问题吗?我使用 php5.2.17,imagick 模块 2.3.0 和 Apache 2.2.15。

【问题讨论】:

  • 嗯,它超时的图像有多大?
  • 这段代码是在循环中还是只生成一张图片?
  • 只有一张图片,当它工作时,生成的图片大约是1-2k。图片为 100x40 像素

标签: php imagick


【解决方案1】:

这意味着您的主机正在终止服务器进程(可能在执行 30 秒后,这将是它们的限制)。您的脚本应用了一些过滤器,在非常大的图像上,这肯定需要 30 多秒。考虑限制图像分辨率。

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多