Inkscape внутри PHP / Apache не отображает шрифты в PNG

Проблема, которую я обнаружил сегодня, похожа на эту неотвеченную проблему ; хотя и не то же самое, это может иметь ту же причину.

Я обрабатываю 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 );