Когда я конвертирую 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
для правильной работы нужно добавить команду к команде