PHP Показать вывод оболочки в реальном времени в пределах HTML - PullRequest
0 голосов
/ 07 мая 2020

У меня есть оболочка оболочки. sh, которая выводит привет каждые 1 секунду. Я хотел бы отображать вывод моего сценария оболочки в реальном времени на моем веб-сайте в поле.

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

Ниже приведен мой php файл.

<code><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <form method="GET" action="splitter.php">
        <label for="folderPath">Folder Path:</label>
        <input type="text" id="folderPath" name="folderPath">
    <br></br>
        <fieldset id="khz">
            <p>Please Choose Khz: </p>
          <input type="radio" value="8khz" name="khz"> 8khz <br>
          <input type="radio" value="16khz" name="khz"> 16khz <br>
        </fieldset>
    <br></br>
        <fieldset id="audio-type">
            <p>Please Choose Type: </p>
          <input type="radio" value="C12" name="group2"> Channel 1 & 2 <br>
          <input type="radio" value="LR" name="group2"> Left to Right <br>
        </fieldset>
        <div class="spaceh10"></div>
        <input class = "submitButton" type="submit" value="Submit">

    <div class="spaceh10"></div>
    <div style="width:500px;height:100px;border:1px solid #000;">
    <?php
    if (isset($_GET['folderPath']) && !empty($_GET['folderPath']) && 
    isset($_GET['khz']) && isset($_GET['group2'])) {

    $folderPath = $_GET['folderPath'];
    $khz = $_GET['khz'];
    $group2 = $_GET['group2'];
    #$folderPath $khz $group2
    $command = './shell.sh';
    while (@ ob_end_flush()); // end all output buffers if any

    $proc = popen($command, 'r');
    echo '<pre>';
    while (!feof($proc)){
        echo fread($proc, 4096);
        @ flush();
    }
    echo '
'; }?>

и ниже мой сценарий оболочки

while true
do 
    echo "Hi"
    sleep 1
done

Как мне заставить мой код работать в коробке? И убедитесь, что выходы просто остаются в коробке и не переполняются. Почему мой код не показывает результат?

Я отслеживаю адрес сервера, на котором работает мой php файл. И когда я нажимаю «Отправить», он загружается навсегда на белом экране, и, поскольку я знаю, что это не закончится, я останавливаюсь в браузере. и я получаю следующую ошибку.

./shell.sh: line 6: echo: write error: Broken pipe

Как я могу показать вывод моей оболочки в реальном времени в поле? и не выходит за пределы рамки?

1 Ответ

2 голосов
/ 08 мая 2020

Если вас устраивает использование инструмента узла, а не чистого php, проверьте websocketd и , этот вопрос .

PHP не является лучший выбор для приложения реального времени, потому что обычно php приложений недолговечны, но то, что вы просите, соответствует требованиям сервера WebSocket. В качестве альтернативы вы можете использовать опрос для вызова конечной точки php, которая читает из файла журнала, если вы действительно хотите использовать php.

Однако возможно , только не так же просто, как использовать node (или elixir, или go, или ruby, et c.), когда существует так много других примеров для этого варианта использования для node.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...