Нужна помощь web-разработчиков

В общем, такой расклад:
1. есть страница на php (что-то вроде веб-интерфейса)
2. есть программа на сервере, запускаемая из этого веб-интерфейса через shell_exec()
3. программа по мере выполнения выдает какую-то информацию (например рандомные числа одно за другим)
4. нужно по мере выдачи этих чисел выводить их и на странице

Собственно вопрос: можно ли это как-то организовать на php (может с применением JS)?
P.S.: естественно вывод нужен без перезагрузки страницы аля AJAX
  • Вопрос задан
  • 2814 просмотров
Решения вопроса 1
alexdjachenko
@alexdjachenko
Есть простой вариант, есть сложный.
Простой: выполняете команду через proc_open(), читаете из открытого командой потока и выдаете на страницу с помощью echo. После каждый выдачи делаете flush() для передачи результата на страницу. Сама страница при этом будет висеть «недозагруженной», коннект с сервером будет открыт и по мере работы скрипта будут подгружаться новые данные. Плюс — в простоте, минусы в ограничениях по вёрстке (чем проще страница — тем лучше). Если браузер, промежуточный прокси-сервер или веб-сервер настроены разрывать открытое соединение через какое-то время, способ будет работать на не очень долгих командах.
Более сложные варианты связаны с AJAX: либо то же самое соединение открываем уже из JavaScript и подгружаем на страницу результаты — так можно сделать более сложную верстку, либо делаем совсем сложно, складываем результат исполнения команды в файл на сервере, пишем скрипт на php, который частями отдает его нашему JavaScript-у, который отображает его на странице.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Aco
@Aco
Заклинатель кода
А почему passthru вам не угодила?
<?php

passthru('somecommand --exec');

?>

Вывод будет идти в реалтайме на экран
Ответ написан
Комментировать
7workers
@7workers
пускай программа выводит рандомные числа в файл, а ajax этот файл периодически читает и показывает, через php скрипт, если нужно.
Ответ написан
Комментировать
@neznae4ko
Программирую, разрабатываю, печатаю, паяю и создаю
С ходу приходят следующие мысли:

1)Если я не ошибаюсь, то при запуске программы через shell_exec на пхп, прока программа не отработает и не завершится, не выдаст результат в пхп, следовательно вы получите в пхп весь массив сразу.

2) возможно вам поможет что-то типа watch tail -n 5 /var/log/syslog.log

3) Вам возможно легче будет настроить вашу программу, чтобы она писала тектовый файл, имя которого передаст ей пхп скрипт, а потом пхп скрипт в цикле будет читать этот файл
Ответ написан
frux
@frux Автор вопроса
Может, я что-то делаю не так, но у меня реалтайма нет...(
PHP:
<?
$result = passthru('bash /etc/startup/start_2.sh');
echo($result);
?>

Программа:
echo 10
sleep 3
echo 5
sleep 4
echo 5
Ответ написан
Вообще system('bash /etc/startup/start_2.sh') делает что вам нужно, но как писали выше есть нюансы с конфигами веб-серверов. Например если у вас стоит nginx перед apache+mod_php, то поведение предсказать невозьмусь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы