стандартный вывод — PHP Raspberry Pi system () выводит эхо

У меня маленькая проблема. Когда я набираю PHP на моей машине Raspberry Pi, это:

system("echo hello");

Он печатает на веб-странице. Зачем? Почему он не печатает в терминал?

Я не видел это на моей замазке.

Большое спасибо.

0

Решение

Там нет проблем с system, Эта функция возвращает все выполненные программы, напечатанные на stdout, В данном случае это «привет».

С помощью wall напечатать всем

Как предположил Джейсен, вы можете использовать wall распечатать его всем, кто пользуется системой. Это полезно, если вы не знаете номер tty, но отображает баннер для терминала, если вы не запускаете его как root.

system("echo test | wall");

Печать вручную в терминал

Чтобы печатать вручную, без баннера и рута, вы можете добавить пользователя вашего сервера Apache в tty группа, вот так: (заменить пользователя)

sudo usermod -a -G tty WEB_SERVER_USER

Тогда вы могли бы сделать что-то вроде этого:

system("your command > /dev/pts/0");

или же

$output = system("your command");
file_put_contents('/dev/pts/0', $output);

Это, конечно, предполагает, что ваш терминал сопоставлен с /dev/pts/0, ls /dev/pts/ чтобы увидеть список.

Перенаправление stderr

В дополнение к вышесказанному, если ваша программа выводит stderrнужно прикрепить 2>&1 в конце вашей команды, например:

system("your_command 2>&1 | wall");

Это перенаправит оба потока.

Запуск вашего скрипта в терминале

Вы также можете запустить свой скрипт в терминале, используя php-cli. Чтобы установить cli, используйте:

sudo apt-get install php5-cli

Затем в вашем скрипте вы можете использовать echo system("your_command 2>&1"); и запустить его в терминале:

php script.php
2

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

это потому, что в веб-контексте stdout — это результат, возвращаемый браузеру

если вы хотите писать в терминалы вошедших в систему пользователей

$wall=popen("wall","w");
fwrite($wall,"Hello!\n");
pclose($wall);

у них должно быть включено «сообщение». (Я думаю, это по умолчанию)

команда mesg y включит его, man mesg для получения дополнительной информации.

0

Системная функция не выполняет команду в любом подключенном tty, поэтому не вижу никакого вывода в tty, присоединенном к вашему сеансу Putty.

Если вы хотите отправлять команды на контакты GPIO в Pi через PHP, вы можете использовать системную функцию для таких вещей, как: system("echo 1 > /sys/class/gpio/xyz) но имейте в виду, что php должен запускаться с правами суперпользователя, что не по умолчанию на веб-сервере Apache.

0
По вопросам рекламы [email protected]