Php Imagick内存和CPU限制

Php Imagick内存和CPU限制,php,cpu-usage,imagick,Php,Cpu Usage,Imagick,我使用的是Imagick的最新版本&php5.3。当我尝试为下面的代码创建图像缩略图时,脚本使用了太多的CPU。如何在Imagick上设置资源消耗限制 $thumb = new Imagick(); $thumb->readImage($this->tmp_file); $thumb->thumbnailImage(200, null); $thumb->writeImage($this->thumb_file); $thumb->destroy(); 谢谢

我使用的是Imagick的最新版本&php5.3。当我尝试为下面的代码创建图像缩略图时,脚本使用了太多的CPU。如何在Imagick上设置资源消耗限制

$thumb = new Imagick();
$thumb->readImage($this->tmp_file);
$thumb->thumbnailImage(200, null);
$thumb->writeImage($this->thumb_file);
$thumb->destroy();

谢谢。

你想做什么?如果您试图在用户每次访问页面时创建缩略图,您将很快在CPU上创建一个非常沉重的负载。您可以通过只生成一次图像并将其保存到缩略图目录来解决此问题

还可以使用PHP.ini或ini_set命令将PHP设置为具有特定内存限制。见和

我不认为您可以在imagemagick中专门设置内存限制,除非您可以自己设置命令行参数上一次回答我的建议

A.利用缓存

B.不要总是生成拇指

C.使用诸如Gearman或beanstalkd之类的求职系统来生成拇指,这样你就不必立即这么做

示例仅在修改原始文件后生成thumb

$file = "a.jpg" ;
$thumbFile = "a.thumb.jpg" ;
$createThumb = true;
if(is_file($thumbFile))
{
    if((filemtime($file) - 10) < filemtime($thumbFile));
    {
        $createThumb = false;
    }
}


if($createThumb === true)
{
    $thumb = new Imagick();
    $thumb->readImage($file);
    $thumb->thumbnailImage(50, null);
    $thumb->writeImage($thumbFile);
    $thumb->destroy();
}

我相信您可以使用以下方法更改Imagick的限制:

可用类型常量:

Imagick::RESOURCETYPE_AREA
Imagick::RESOURCETYPE_DISK
Imagick::RESOURCETYPE_FILE
Imagick::RESOURCETYPE_MAP
Imagick::RESOURCETYPE_MEMORY
使用上面列出的相同常数,您可以查看当前使用的限制之一:

Imagick::getResourceLimit( $type )
Imagick::getResourceLimit( $type )