GNU/Linux >> Linux の 問題 >  >> Linux

PHP でリアルタイム出力を使用してプロセスを実行する

これは私のために働いた:

$cmd = "ping 127.0.0.1";

$descriptorspec = array(
   0 => array("pipe", "r"),   // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),   // stdout is a pipe that the child will write to
   2 => array("pipe", "w")    // stderr is a pipe that the child will write to
);
flush();
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre>";
if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "</pre>";

これは、シェル コマンドのリアルタイム出力を表示する良い方法です:

<?php
header("Content-type: text/plain");

// tell php to automatically flush after every output
// including lines of output produced by shell commands
disable_ob();

$command = 'rsync -avz /your/directory1 /your/directory2';
system($command);

出力バッファリングを防ぐために、この関数が必要になります:

function disable_ob() {
    // Turn off output buffering
    ini_set('output_buffering', 'off');
    // Turn off PHP output compression
    ini_set('zlib.output_compression', false);
    // Implicitly flush the buffer(s)
    ini_set('implicit_flush', true);
    ob_implicit_flush(true);
    // Clear, and turn off output buffering
    while (ob_get_level() > 0) {
        // Get the curent level
        $level = ob_get_level();
        // End the buffering
        ob_end_clean();
        // If the current level has not changed, abort
        if (ob_get_level() == $level) break;
    }
    // Disable apache output buffering/compression
    if (function_exists('apache_setenv')) {
        apache_setenv('no-gzip', '1');
        apache_setenv('dont-vary', '1');
    }
}

私が試したすべてのサーバーで機能するとは限りませんが、このタイプの動作を機能させるために髪を抜く必要があるかどうかを判断するために、php 構成で何を探すべきかについてアドバイスを提供できれば幸いです。あなたのサーバーで!他に知っている人はいますか?

プレーンな PHP でのダミーの例を次に示します:

<?php
header("Content-type: text/plain");

disable_ob();

for($i=0;$i<10;$i++) 
{
    echo $i . "\n";
    usleep(300000);
}

これが、ここでグーグル検索した他の人に役立つことを願っています.


Linux
  1. UbuntuでNginxを使用して複数のPHPバージョンを実行する方法は?

  2. カラー出力をgrepする方法

  3. Rsync プロセスをバックグラウンドで実行する方法

  1. Gnome-terminalの真の複数プロセスインスタンスを実行しますか?

  2. PHPスクリプトをデーモンプロセスとして実行

  3. 「&」を使用して Linux シェル コマンドを実行するのはなぜですか?

  1. Vim:+ xビットでファイルを作成しますか?

  2. Sedでテール出力を着色しますか?

  3. ユーザーとして引数を使用してスクリプトを実行しますか?