У меня очень странная проблема в моей среде 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. Без вашей помощи я не буду знать проблему, подобную этой. 🙂