Команда PHP exec не имеет вывода $, но $ return равен 0

Это мой код для выполнения команды из PHP:

            $execQuery = sprintf("/usr/local/bin/binary -mode M \"%s\" %u %s -pathJson \"/home/ec2/fashion/jsonS/\" -pathJson2 \"/home/ec2/fashion/jsonS2/\"", $path, $pieces, $type);
exec($execQuery, $output, $return);

$return значение всегда 0, но $output пустой. $output должен быть JSON.

  • Если я выполню то же самое, но удаляю одно письмо binary (например /usr/local/bin/binar Я получаю (правильно) $return = 127,
  • Если я напишу другие параметры (например, -mode R который не выходит) Я получил ошибки из консоли (которые также являются правильными).
  • Если я бегу точно $execQuery (который я печатаю раньше, чтобы быть уверенным в кавычках) на консоли, он выполняется правильно. Это только сторона PHP, где я получил ошибку.

Что может быть не так?
Заранее спасибо.

0

Решение

Ну, пара вещей может происходить …

  1. Этот двоичный файл, с которым вы работаете, записывает что-то еще, что STDOUT (например, STDERR)
  2. Варианты env, доступные пользователю PHP, отличаются от переменных env, доступных пользователю, работающему с консолью (и эти переменные необходимы)
  3. Пользователь PHP не имеет права доступа к некоторым файлам.

Для отладки может быть лучше использовать proc_open вместо exec и проверить STDOUT и STDERR. Это может дать вам дополнительную информацию о том, что происходит.

Предложение (и бесстыдная реклама)

Я написал небольшая служебная библиотека для PHP, который выполняет внешние программы более безопасным способом и предоставляет дополнительную информацию для отладки. Это может помочь вам, по крайней мере, точно определить проблему.

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru