При использовании ImageMagick я могу установить определенные ограничения на использование памяти и максимальное количество потоков. Насколько я знаю, есть 3 способа сделать это:
- использовать параметры командной строки, такие как "convert -limit memory 128mb original.jpg new.jpg"
- использовать переменные окружения, такие как "MAGICK_THREAD_LIMIT = 1"
- отредактируйте файл конфигурации 'policy.xml', чтобы изменить значение по умолчанию.
Я проверил каждый из этих методов, используя "ресурс-списка конвертирования", и они работают.
Теперь мне нужно использовать расширение IMagick в PHP. Есть функция, которую я могу использовать для установки ограничений:
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?
EDIT:
Мне удалось установить ограничение потока до 1, скомпилировав ImageMagick с опцией --without-threads. : P Это придется делать, пока я не найду лучшего решения.