Как отключить функцию PHP exec для печати в оболочке?

У меня есть следующий php-код:

exec('curl -X POST http://mysite.com', $output =array());

Возвращаемая строка my http://mysite.com не отображается в оболочке, но отображается следующая строка:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     3    0     3    0     0     19      0 --:--:-- --:--:-- --:--:--     0

Я не хочу, чтобы что-то отображалось в оболочке. Как отключить привязку к оболочке при использовании команды exec(). Есть другие команды?


person Cory    schedule 02.09.2010    source источник


Ответы (2)


Используйте тихую опцию curl: -s

exec('curl -s http://us.php.net/manual/en/function.ob-clean.php', $output);
person KeatsKelleher    schedule 02.09.2010
comment
Я не думаю, что вопрос ОП касается сообщений об ошибках PHP. Речь идет о получении вывода CURL, но без информации о передаче. - person Pekka; 03.09.2010

Вывод потока stdout захватывается php exec() функция. Однако поток stderr — нет, поэтому одни элементы отображаются на экране, а другие — нет.

В данном случае это происходит потому, что curl выводит информацию о состоянии в потоке stderr.

Решения:

  • Перенаправить stderr на нулевое устройство, добавив 2>/dev/null к команде, выполняемой exec() (2> nul в Windows). Это удалит все сообщения, отправленные на stderr.

  • Или перенаправьте поток stderr на stdout, добавив вместо него 2>&1. Это позволит захватить оба вывода с помощью exec() на случай, если они понадобятся вам в вашем php-скрипте.

Однако для конкретного случая в вопросе использование параметра curl может иметь больше смысла. :П

person Alfro    schedule 31.05.2016