Функция exec () в Laravel работает неправильно, в тинкере и консоли правильно - PullRequest
0 голосов
/ 08 июля 2019

У меня странная проблема с функцией exec в приложении Laravel. Используя библиотеку imagemagick, мне нужно объединить два файла pdf - одна и та же команда оболочки работает правильно в терминале, exec () с этой командой также работает корректно. Однако при вызове из задания или контроллера из приложения Laravel создается впечатление, что он вообще не видит исходный файл. В чем может быть причина? Все файлы хранятся в сгенерированных подпапках хранилища.

  • нормально работает в тинкере
  • правильно работает в терминале
  • правильно работает в простом тестовом php-файле вне приложения Laravel
  • не работает в задании / контроллере в приложении Laravel (похоже, что он не читает входной файл_1.pdf (выходной файл создается только с оверлейным файлом, без исходного «фона») Уже пробовал Process :: class, exec использовался для упрощения кода. Разрешения установлены правильно.
exec('convert "/Users/robert/Sites/start-app/storage/documents/file_1.pdf" null: "/Users/robert/Sites/start-app/storage/documents/stamps/1.png" -gravity SouthEast -geometry +150+150 -compose over -layers composite "/Users/robert/Sites/start-app/storage/documents/processed/output_file_1.pdf"');

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Я только что наконец нашел решение.Проблема была вызвана путем к GhostScript, хотя imagemagick и gs находятся в одном и том же пути, по какой-то причине при выполнении из приложения exec () команда gs не может быть найдена.На случай, если кто-то столкнется с подобной проблемой, вот решение:

exec('export PATH=/usr/local/bin:$PATH; convert "/Users/robert/Sites/start-app/storage/documents/file_1.pdf" null: "/Users/robert/Sites/start-app/storage/documents/stamps/1.png" -gravity SouthEast -geometry +150+150 -compose over -layers composite "/Users/robert/Sites/start-app/storage/documents/processed/output_file_1.pdf"');

Добавление пути экспорта сделало его работоспособным.

0 голосов
/ 09 июля 2019

Есть ли у вас разные файлы php.ini для сервера веб-запросов и обработки cli?Обычно они хранятся в следующих (или похожих) папках

/etc/php/7.3/cli/php.ini
/etc/php/7.3/fpm/php.ini

. Вы также можете проверить это, запустив phpinfo() из cli, а также из веб-запроса и сравнив обе.

Если это так, вы должны проверить опцию disable_functions.Более подробную информацию об этом можно найти здесь .Не забудьте перезапустить ваш веб-сервер после этого, чтобы изменения вступили в силу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...