Запускать скрипты ruby из php, игнорируя вывод

0

Мне нужно запустить в фоновом режиме команду оболочки (которая использует ruby-скрипт из /usr/local/bin), используя php (из формы html/php) и игнорируя весь вывод. Я пробовал безуспешно exec(), system(), shell_exec().

Кроме того, выполнение сценария (не написанного мной, ссылка на скрипт - я не знаю ruby) в терминале и перенаправление стандартного вывода на /dev/null, он продолжает показывать информацию в режиме реального времени о ходе загрузки и скорости загрузки пока он не будет завершен.

Полагаю, это из-за сценария, и я где-то читал, что proc_open() может помочь, но я не знаю, как его использовать.

РЕДАКТИРОВАТЬ

Также добавив "&" к команде (в терминале), она продолжает показывать информацию в реальном времени о ходе загрузки и скорости загрузки до ее завершения.

Теги:

1 ответ

0
/usr/local/apache2/htdocs$ ls 
1.php   ruby_prog.rb

1.php:

<div>hello</div>
<div>
<?php

$command = 'ruby ruby_prog.rb';
$output = [];
exec($command, $output, $return_var);
echo($output[0]);

?>
</div>

ruby_prog.rb:

puts 'world'

URL:

http://localhost:8181/1.php

вывод в браузере:

hello
world

source html:

<div>hello</div>
<div>
world</div>

Вы можете проверить значение $return_var --if на 0, тогда программа ruby успешно работала; если оно отличное от нуля, произошла ошибка.

Если вам не нужен какой-либо вывод, вы можете использовать команду:

ruby ruby_prog.rb > /dev/null 2>&1

> Отправляет stdout в /dev/null, который является приемником, то есть он действует как черная дыра, а 2>&1 говорит, чтобы отправить stderr (2) туда, куда идет stdout (& 1).

  • 0
    Это не работает ... Я получаю только первую строку вывода, и сценарий не продолжает выполнение ... Запуск сценария в терминале, вывод обновляется каждую секунду до завершения, а затем, возможно, это создает проблемы с "фоновым бегом" мне нужно
  • 0
    @lebrac, это создает проблемы с нужным мне «фоновым бегом» - ты ничего не сказал об этом в своем вопросе.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню