bash передает эхо-значение процессу, цикл php (процесс) не считывает stdin

#php #linux #loops #server #command

#php #linux #циклы #сервер #команда

Вопрос:

Фон:

Я нахожусь в положении, когда я помещаю данные в командную строку, и мне нужен цикл php (который станет своего рода сервером), чтобы читать STDIN и просто передавать то, что он считывает, в оболочку, в которой он запущен.

Следующий ужасный код работает, когда процесс выполняется в той же оболочке, что и отображаемое содержимое:

 <?php

echo getmypid();
$string = "/proc/" . getmypid() . "/fd/0";
while (true) {

    fwrite(STDOUT, fgets(fopen($string, 'r'), 4096) . " workedn");

}

?>
  

Я перепробовал много вариантов:

 <?php

echo getmypid();
$string = "/proc/" . getmypid() . "/fd/0";
while (true) {

    $fo = fread(STDIN, 1024);
    fwrite(STDOUT, $fo);

}

?>
  

Проблема в том, что всякий раз, когда я записываю в этот цикл с отдельного терминала, выходные данные отображаются в другом терминале, но цикл не обрабатывается.

Когда я ввожу текст в том же терминале, текст повторяется обратно.

Мне нужен способ получить данные командной строки в этот цикл из любого источника.

Комментарии:

1. Как вы записываете в него с отдельного терминала?

2. Зачем вам нужно делать это на PHP? Стандартная cat команда считывает данные со своего стандартного ввода и записывает в стандартный вывод.

3. Бармар! Рад видеть вас снова. Из отдельного окна: echo foo > /proc/{pid}/fd/0 . Конечно же, вывод появляется.

4. Этот цикл PHP в конечном итоге станет сервером, который прослушивает порт и записывает в сокеты a la websockets для push-уведомления. У меня отдельный процесс выдает его вывод в командную строку. Таким образом, я хотел бы, чтобы этот другой процесс подключался к моему циклу php.

5. Запись в этот FD не вводит входные данные в терминал. FD 0 подключен к терминалу этого окна, поэтому вы записываете выходные данные на терминал.