[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: web-интерфейс для программ
olgatcpip
Всем привет.

Есть скрипт test.sh
#!/bin/bash

echo "1";
sleep 2;

echo "2";
sleep 2;

echo "3";
sleep 2;

echo "4";
sleep 2;

echo "Enter symbol";
read answer
echo "Answer is $answer";



Здесь выводится "1", потом 2 секунды ждёт и требует ввода, потом выводит то, что ввели.

Мне нужно написать Web-интерфес, который бы запускал скрипт, понимал, что скрипту нужен ввод, у клиента бы эта информация отобразиласть на странице сайта. Клиент что-то вводит, скрипт продолжает работать.

1 - Нужно онлайн отображение процеса выполнения скрипта. Т.е. весь вывод транслировать на веб страницу.
2 - Чтобы клиент мог влиять на это выполнение. Т..е смог бы ввести, если программа спросит.


Как такое сделать? Есть ли решения? Или в какую сторону копать?



Я накатала код такой для клиента пока, но выаолнение программы онлайн не транслируется :( Т.е.
<?php

ob_start();

function flush_buffers(){
ob_end_flush();
ob_flush();
flush();
ob_start();
}

$descriptorspec = array(
0 => array("pipe", "r"), // stdin - канал, из которого дочерний процесс будет читать
1 => array("pipe", "w"), // stdout - канал, в который дочерний процесс будет записывать
2 => array("file", "/tmp/out.txt", "a") // stderr - файл для записи
);

$cwd = '/tmp';
$env = null; //array('some_option' => 'aeiou');
echo "Start<br>";flush_buffers();
$process = proc_open('./test.sh', $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {
// $pipes теперь выглядит так:
// 0 => записывающий обработчик, подключенный к дочернему stdin
// 1 => читающий обработчик, подключенный к дочернему stdout
// Вывод сообщений об ошибках будет добавляться в /tmp/error-output.txt


fwrite($pipes[0], '1234'); echo '#';flush_buffers();
fclose($pipes[0]);echo '#';flush_buffers();

echo stream_get_contents($pipes[1]);echo '#';flush_buffers();
fclose($pipes[1]);echo '#';flush_buffers();

// Важно закрывать все каналы перед вызовом
// proc_close во избежание мертвой блокировки

$return_value = proc_close($process);echo '#';flush_buffers();

echo "команда вернула $return_value\n";
}
echo "die!"
?>


вывод такой:
Цитата

Start
##<ожидание ожидание выполнения всего скоирта .sh>1 2 3 4 Enter symbol Answer is qwerty <выполнился>###команда вернула 0 die!


_____________
Ласковое слово и кошке приятно... Плюсик в карму сойдет wink.gif
*smarty дока - новая любовь
Моё рукотворение ругайте, хвалите smile.gif
Веду маленький блог
в этом блоге публикую новые работы
WMR217126627282 wink.gif

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.