2015-07-07 3 views
0

Что касается этого кодаЧто делает 2> & 1 в этом фрагменте php?

public function invoke($url) 
{ 
    exec('wget 2>&1', $output); 
    print_r($output); 
} 

Что делает 2>&1 делать в этой команде? Я нашел это на SO, но 2>&1 не был объяснен

wget - это Linux-команда, и я запускаю ее с PHP с помощью exec().

Приведенный выше код работает. Мне просто нужно вставить $url в нужное место и понять 2>&1.

Ссылки по теме

GNU Documentation on Wget

+0

Имейте это в виду [ответ] (http://unix.stackexchange.com/a/99264) – empiric

+0

Также [этот] (http://superuser.com/questions/152688/why-run-a -linux-shell-command-with) – Machavity

ответ

5

У вас есть несколько выходных потоков.
2 наиболее распространенными являются STDOUT (стандартный вывод) и STDERR (выход ошибки).

Обычно вы видите только выход STDOUT. С exec это также единственный поток, который он ловит.

Теперь: команда 2>&1 означает, что вы передаете вывод, который перейдет на STDERR на тот же выход, что и обычный выход. В этом случае для функции exec PHP (но в основном для вашей оболочки).

Это используется, главным образом, для демонстрации ваших приложений и отправки всего вывода в/dev/null, но его также можно использовать для этого случая (чтобы вы могли видеть все с помощью PHP).

+0

Вы говорите, что 1 относится к 'STDOUT', а 2 относится к' STDERR'? –

+0

2 действительно относится к 'STDERR'. & 1 относится к выходному перенаправлению 'STDOUT' (с амперсандом). 1 относится к 'STDOUT', но мы здесь не используем 1, но & 1 (да, это разница). – Blaatpraat

+0

Извините, я спрашиваю гипотетически, что бы я сказал, если бы это было всего лишь 1. Будем ли 1 сам ссылаться на STDOUT? –

Смежные вопросы