2012-03-14 26 views
2

サーバサイドからcreate captchaが必要です。私はPHP + imagick拡張を使用します。時には、画像を作成する際に500エラーが発生することがありますが、ほとんどの場合は問題ありません。 コードは以下のようなものです:phpとimagickで画像を作成している時にタイムアウトエラーが発生しました

$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); 

エラーログレポートは、最後の行で

$Imagick->drawImage($ImagickDraw). 

誰もが今までこのような問題を満たしていました「30秒の最大実行時間を超えて」?私はphp5.2.17、imagickモジュール2.3.0とApache 2.2.15を使用します。

+0

これは、タイムアウトしている画像がどれだけ大きいのですか? – Amber

+0

このコードはループに入っていますか、または1つのイメージを生成していますか? – Ethan

+0

ただ1つのイメージ、それが動作するとき、生成されたイメージは約1-2kです。画像は100x40ピクセルです –

答えて

1

これは、ホストがサーバープロセスを強制終了している可能性が高いことを意味します(30秒後に実行された可能性があります)。スクリプトはいくつかのフィルタを適用し、非常に大きな画像では30秒以上かかることがあります。画像の解像度を制限することを検討してください。