Linux — система PHP () дает результаты, отличные от терминальных, отсутствующие шрифты

Моя проблема

Я использую cairosvg на Linux Ubuntu 14.04 LTS с PHP и Apache. Я запускаю его с функцией PHP system(), Это команда, которую я выполняю.

cairosvg -f pdf -o /var/www/dev/output.pdf /var/www/dev/input.svg

Когда я запускаю это в терминале, я получаю ожидаемые результаты, он генерирует PDF-файл, как и ожидалось. Однако, когда я запускаю это в PHP с помощью system(), он все еще генерирует файл PDF, но не использует правильные шрифты.

Что я пробовал

Шрифты установлены. Права доступа к файлу как для папки, так и для шрифтов были установлены на 777. Apache был установлен как совладелец для папки шрифтов и шрифта. Пути к файлам являются абсолютными. echo на system() не дает ошибок. Я пытался использовать эквивалентные альтернативы system() также.

1-е основное обновление: Я попытался запустить эту команду ImageMagick, чтобы проверить разницу в доступных шрифтах. convert -list font На терминале я вижу свои установленные шрифты, но не на system() вызов.

2-е ОБНОВЛЕНИЕ Я побежал printenv команда в терминале и system() и увидел, что у них были разные ценности. Я устанавливаю переменные среды HOME и USER, используя proc_open(), но я получаю те же результаты. Код выглядит следующим образом.

$command = "cairosvg -f pdf -o /var/www/dev/output.pdf /var/www/dev/input.svg";
$descriptorspec = array();
$pipes = array();
$env = array(
'HOME' => '/home/ntwdev',
'USER' => 'ntwdev',
);
$resource = proc_open(
$command,
$descriptorspec,
$pipes,
$cwd = null,
$env
);

Почему шрифты появляются только тогда, когда я запускаю команду в терминале, а не в system()

0

Решение

Вы можете попытаться выполнить некоторую команду, чтобы восстановить кэш шрифтов перед командой создания PDF?

Я могу думать о:

$ xset fb rehash

Со страницы руководства:

Аргумент rehash сбрасывает путь шрифта к его текущему значению, заставляя сервер перечитать
базы данных шрифтов в текущем пути шрифта. Обычно это используется только при добавлении новых шрифтов в
Каталог шрифтов (после запуска mkfontdir для воссоздания базы данных шрифтов).

Если у вас есть шрифты в специальных каталогах, вы можете:

$ xset +fp /usr/share/fonts/misc
0

Другие решения

Проблема была в том, что cairosvg и / или пользователь apache www-data могли получить доступ только к шрифтам, если /usr/share/fonts папка, независимо от файла или разрешения пользователя.

0

По вопросам рекламы [email protected]