PHP: используйте inkscape для преобразования eps в svg - PullRequest
1 голос
/ 05 октября 2019

Когда я конвертирую eps в svg в терминале, используя inkscape, он работает нормально.
Но когда я выполняю ту же команду, используя php's shell_exec, она не работает. (Я также попытался exec и system без удачи)

Пример кода:

<?php

unlink('./sample.svg');
$file_path = realpath('./sample.eps');
$dest_path = getcwd() . '/sample.svg';

//# inkscape --file=sample.eps --export-plain-svg=sample.svg
// command works fine in terminal but not in php

$command = "inkscape --file=$file_path --export-plain-svg=$dest_path";
// command fails with no output (null)
$output = shell_exec($command);
var_dump($output);
var_dump(is_file('./sample.svg'));

Эта же команда также работает корректно из оболочки php!
Я не смогопределить причину, потому что я не смог проверить вывод (он всегда нулевой)

Преобразование работало нормально с ai -> svg и pdf -> svg

Я подозреваю, что это похоже на Команда работает нормально через терминал, но не shell_exec php , но что может быть решением в этом случае?

PS: я использую этот пример eps-файла для тестирования

Редактировать: я добавил 2>&1 в команду shell_exec и получил этот вывод

/srv/www/git/presta17_designer/eps/sample.eps:1: parser error : Start tag expected, '<' not found
%!PS-Adobe-3.0 EPSF-3.0
^
/srv/www/git/presta17_designer/eps/sample.eps:1: parser error : Start tag expected, '<' not found
%!PS-Adobe-3.0 EPSF-3.0
^

** (inkscape:717): WARNING **: 14:16:21.492: Specified document /srv/www/git/presta17_designer/eps/sample.eps cannot be opened (does not exist or not a valid SVG file)

Дополнительная информация:
Я нашел причину проблемы спомощь комментаторов
В shell_exec окружение PATH пусто
(var_dump(shell_exec("printenv PATH"));)
, но ghostscript, который используется для eps, находится в /usr/bin/ghostscript
, поэтому PATH=/usr/bin для правильной работы нужно добавить команду к команде

Ответы [ 2 ]

3 голосов
/ 09 октября 2019

Inkscape использует ghostscript для .eps преобразования, ошибка, выдаваемая в вашем случае, не предполагает этого, но действительно возникает, если inkscape не может найти ghostscript - поэтому я предложил вам проверить, какая часть исправленного PATH действительно решил проблему.

Вы обнаружили, что минимальное значение PATH=/usr/bin, добавленное к команде, достаточно для решения проблемы в вашем случае, и это, по моему скромному мнению, действительно предпочтительное решение.

1 голос
/ 06 октября 2019

Я бы предположил разрешения.

Возможно, PHP-оболочка работает, потому что она работает под вашим локальным пользователем.

Проверьте, какой пользователь использует ваш веб-сервер или сеанс PHP, и проверьте, может ли этот пользовательполучить доступ и запустить inkscape. Если нет, добавьте необходимые разрешения.

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

Вы можете попробовать решения, чтобы найти, под каким пользователем php работает ваш веб-сервер: Как проверить, под каким пользователем php работает?

Дайте этому пользователю права на выполнение вашей папки inkscape, и она должна работать.

...