使用 ImageMagick 时,我可以为内存使用和最大线程数设置一定的限制。据我所知,有3种方法可以做到这一点:
- 使用命令行选项,例如“convert -limit memory 128mb original.jpg new.jpg”
- 使用像“MAGICK_THREAD_LIMIT=1”这样的环境变量
- 编辑“policy.xml”配置文件以更改默认值。
我已经使用“convert -list resource”测试了这些方法中的每一个,它们都有效。
现在,我需要在 PHP 中使用 IMagick 扩展。我可以使用一个函数来设置限制:
bool Imagick::setResourceLimit (int $type, int $limit)
对于第一个参数,我可以使用以下之一:
imagick::RESOURCETYPE_AREA (integer) //equivalent of MAGICK_AREA_LIMIT
imagick::RESOURCETYPE_DISK (integer) //equivalent of MAGICK_DISK_LIMIT
imagick::RESOURCETYPE_FILE (integer) //equivalent of MAGICK_FILE_LIMIT
imagick::RESOURCETYPE_MAP (integer) //equivalent of MAGICK_MAP_LIMIT
imagick::RESOURCETYPE_MEMORY (integer) //equivalent of MAGICK_MEMORY_LIMIT
问题是 MAGICK_THREAD_LIMIT 没有等效项,而 IMagick 似乎只是忽略了配置文件和环境变量。我怎么知道这个?我已将所有内存限制设置为零,当 IMagick 报告内存不足时,它仍然可以正常运行。
我真的希望我已经说清楚了。问题是:使用 IMagick 时如何更改线程限制?
编辑:通过使用“--without-threads”选项编译 ImageMagick,我设法将线程限制设置为 1。:P 在我找到更好的解决方案之前必须这样做。