想象没有足够的处理器能力?

时间:2010-10-28 10:12:53

标签: php imagemagick imagick

我正尝试使用以下配置在VDS上裁剪动画gif:

~800MHz和256 RAM

它不起作用。它只是吃了内存和处理器,并在一分钟后没有响应。

http://i192.photobucket.com/albums/z228/Somebi/no-responce.jpg

http://imm.io/1OID

在本地机器上我创建了一个256 RAM的虚拟机。 一切都很好,但有点慢,我必须承认...... 但我在本地机器上安装了Duo Core 7400。

我尝试使用以下设置限制VDS上的内存使用量:

$gif = new Imagick($s['src']);

set_time_limit(0);
$gif->setResourceLimit(Imagick::RESOURCETYPE_MEMORY,32);
$gif->setResourceLimit(Imagick::RESOURCETYPE_MAP,64);

// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_MEMORY);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_MAP);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_FILE);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_DISK);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_AREA);
// exit;

$gif = $gif->coalesceImages();

foreach($gif as $frame){
    $frame->cropImage($s['params']['w'], $s['params']['h'], $s['params']['x'], $s['params']['y']);      
    $frame->setImagePage($s['params']['w'], $s['params']['h'], 0, 0);
}   

$gif->writeImages($s['dest_path'] .'/'. $fullname,true);

但我可以限制处理器的使用吗?

对于慢速VDS有什么解决方案吗? :|

谢谢大家!

更新

   print_r(getimagesize($s['src']));
   exit;

   $gif = new Imagick($s['src']);
   etc...

    Array
(
    [0] => 530
    [1] => 150
    [2] => 1
    [3] => width="530" height="150"
    [bits] => 8
    [channels] => 3
    [mime] => image/gif
)

UPDATE2:

pathinfo($s['src'])

(
    [dirname] => images/tmp
    [basename] => 43138a0723d6ae0799564bd6acb8c7b83c8df483.gif
    [extension] => gif
    [filename] => 43138a0723d6ae0799564bd6acb8c7b83c8df483
)

UPDATE3: 如何调试imagick扩展? :(

找到了这个包裹: http://fr2.rpmfind.net/linux/RPM/fedora/updates/testing/13/i386/debug/php-pecl-imagick-debuginfo-3.0.0-5.fc13.i686.html

有人试过吗?

3 个答案:

答案 0 :(得分:0)

你可以增加php的最长执行时间,我相信它默认为60秒。

在运行时使用set_time_limit,或使用max_execution_time进行ini配置。

好吧,从头开始,我看到你已经在做了。卫生署!

答案 1 :(得分:0)

我将推测$s['src']包含一个远程网址。

这可能意味着您真正的麻烦就是获取远程图像。防火墙或其他可能导致脚本超时。

首先尝试使用本地图像。我敢打赌,啤酒可以正常工作。在这种情况下,请尝试使用file_get_contents()来获取远程文件。我想我读过IMagick的构造函数在URL上遇到问题的地方。

答案 2 :(得分:0)

尝试在命令行上运行php脚本,看看它是否与执行时间有关。

shell> php <your-script-name>

如果php环境变量中没有PATH,则可能必须将完整路径替换为{{1}}。

请记住,ImageMagick针对质量进行了优化;不是为了速度。有一个名为GraphicsMagick的类似库,他们说这些库运行良好,资源很少。如果您仍然遇到资源问题,可以考虑尝试。