Проблема в том, что если в вашем ImageMagick включен OpenMP, то ImageMagick использует несколько ядер ЦП, и если вы используете PHP-FPM, то он основан на многопоточности, но максимальное время_экспозиции, заданное вами в конфигурации php.ini, предназначено для один процессор.
В вашем терминале выполните: convert -list resource
и посмотрите значение Thread
. Это будет выше, чем 1.
Вы можете уменьшить количество потоков до 1, перейдя в ImageMagick policy.xml:
<policy domain="resource" name="thread" value="1"/>
Проверьте ограничение количества потоков еще раз: convert -list resource
. Это должно быть 1.
Теперь перезапустите ваш PHP-FPM. Например: service php7.1-fpm restart
и теперь вы увидите, что PHP использует точное max_execution_time, как вы установили.
Если вы не можете использовать терминал, вы также можете установить ограничение потока напрямую через PHP.
Вы также можете установить ограничение потока непосредственно через PHP:
Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1);
echo Imagick::getResourceLimit(Imagick::RESOURCETYPE_THREAD);
Эта константа доступна, если Imagick был скомпилирован с
ImageMagick версии 6.7.8 или выше.
Но так как мы сейчас используем однопоточный, производительность ImageMagick будет не такой хорошей, как раньше. Таким образом, вы можете увеличить значение потока в policy.xml и установить для max_execution_time значение: 30 * number_of_threads
.
Другие решения были бы трудными, но достигают того же результата, что и мы выше.
- Перестройка ImageMagick с отключенным OpenMP.
- Использовать mod_php вместо PHP-FPM.