Проблема, которую я обнаружил сегодня, похожа на эту неотвеченную проблему ; хотя и не то же самое, это может иметь ту же причину.
Я обрабатываю SVG-файлы, используя inkscape
, либо PNG, либо PDF. По большей части я намерен использовать Gearman для рендеринга в фоновом режиме, но на данный момент я создаю несколько миниатюр внутри процесса PHP / Apache. Похоже, что если inkscape вызывается (через PHP- exec
) внутри процесса Apache, он не может найти нужные ему шрифты. Таким образом, графические элементы выглядят отлично, но любые текстовые элементы не выводятся на выходе PNG.
Я подозреваю, что среда CLI изнутри Apache отличается от моей обычной консоли bash таким образом, что шрифты не видны. Я на OS X 10.6.8. Есть идеи?
Редактирование: следуя за комментариями, я захватил php -i
внутри Apache и Gearman и разделил первый на второй (так что теоретически применение diff заставило бы его работать). Результат здесь .
Редактирование 2: я пробовал использовать convert -list font
в обеих средах с использованием system
– никаких различий вообще.
Как было указано в комментариях выше, это было вызвано различием в окружающей среде – HOME
env var был установлен по-разному внутри выполненного процесса. Использование proc_open
вместо простого exec
дало более точный контроль над этим процессом и явно установило, что env var решил проблему.
Для записи здесь используется proc_open
который помог исправить эту проблему:
$command = "{$exec} --without-gui {$params} {$file} {$redirect}"; $return = -1; // Comment this out for now //exec($command, self::$output, $return); $descriptorspec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("file", "/dev/null", "a") ); $pipes = array(); $env = array( // Try additional stuff here, but culprit was: 'HOME' => '/Users/jon', ); $resource = proc_open( $command, $descriptorspec, $pipes, $cwd = null, $env );