Метод setFont PHP Imagick занимает слишком много времени для выполнения

У меня очень странная проблема в моей среде PHP с помощью Imagick:

Моя среда такова:

Darwin 16.4.0 Darwin Kernel Version 16.4.0: Thu Dec 22 22:53:21 PST 2016; root:xnu-3789.41.3~3/RELEASE_X86_64 x86_64 PHP 7.0.16 (cli) (built: Feb 16 2017 22:57:49) ( NTS ) imagick module version => 3.4.3RC4 imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel Imagick compiled with ImageMagick version => ImageMagick 6.9.7-6 Q16 x86_64 2017-02-01 http://www.imagemagick.org Imagick using ImageMagick library version => ImageMagick 6.9.7-7 Q16 x86_64 2017-02-09 http://www.imagemagick.org 

И метод setFont из Imagick будет стоить слишком долго для выполнения (и даже получить 30 секундный тайм-аут по умолчанию).

Код выглядит так:

 <?php $img = new Imagick(); $img->setFont("./SpicyRice.ttf"); echo "Done"; 

И код $img->setFont("./SpicyRice.ttf") застрянет.

Ошибка не возникает, PHP просто зависает при этом методе, а время ожидания по умолчанию – 30 секунд.

Есть ли у кого-нибудь мысли об этом? Это файл шрифта, который я использовал.

С помощью @Danack я решаю проблему и исправляю ее.

Проблема такая простая, но ее действительно трудно идентифицировать в первый раз, я думаю.

Проблема в том, что я установил много новых шрифтов в библиотеку шрифтов и не перестраивал кеш шрифтов.

Итак, каждый раз, когда Imagick initing, он пытается получить конфигурацию шрифта и конфигурацию шрифта, пытаясь прочитать каждый шрифт в моей папке с шрифтом, чтобы написать кеш шрифтов.

Но поскольку PHP имеет 30-секундный тайм-аут, поэтому процесс PHP завершится неудачно, прежде чем кеш шрифта будет перестроен. Таким образом, это бесконечная проблема, если я не запустил команду fc-cache в командной строке и не создала кеш шрифта, тогда в следующий раз, когда я вызову этот php, плагин Imagick будет использовать кеш шрифта системы вместо того, чтобы генерировать все информация для шрифта.

И это объясняет, почему это работает в моей командной строке, потому что я являюсь пользователем системы, и система будет создавать кеш шрифтов только для меня.

Поэтому, когда я запускаю PHP с помощью командной строки, он будет работать, поскольку он имеет правильный кеш шрифта, но для сервера, так как он httpd и работает с использованием кеша системы, он не будет работать.

Итак, на данный момент, PHP-образ работает нормально.

Еще раз спасибо @Danack. Без вашей помощи я не буду знать проблему, подобную этой. 🙂