2009-08-28 13 views
2

これで問題はあります。出力(通常はLinuxコンソールに表示されるもの)を読む必要があります。私の最大の問題は、線形実行の出力を読む必要はなく、wget http://ubuntu.com/jaunty.isoのようなもので、ETAを表示するということです。PHP読み込みコンソール出力

また、作業の流れは以下の通りです:

S - ウェブサーバ

C -

C Sのイントラネット内のコンピュータ1 - Sのイントラネット内のコンピュータ2

など。

次いで、ユーザは、(ユーザの要求に応じて)wgettop又は他のコンソールロギングコマンドを開始C Xに接続Sに接続します。ユーザーはC xから「コンソールログ」を表示できますが、wgetは指定されたターゲットをダウンロードします。

これはもっともらしいですか?サーバー/クライアントソフトウェアを使用せずに実行できますか?

ありがとうございます!

+0

はどのようにユーザーがサーバーに接続していますか? SSHまたは何ですか? – n1313

+0

ユーザーはSSH経由で接続しません。ユーザーはただSのWebページに行きます。サーバーは、イントラネット内のコンピューターにSSHまたは独自のサーバーソフトウェアを介して接続しますが、私はSSHオプションのソリューションに興味があります。 –

答えて

3

これにはPHP関数proc_openを使いたいでしょう - パイプの配列を指定することができます(stdin、通常はコンソールに接続していればキーボードに接続されます、stdout、stderr、両方通常はディスプレイに印刷されます)。その後、一例として与えられたプログラムだから、

の入力/出力folwを制御することができます。

$pipes = array(); 
$pipe_descriptions = 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("file", "/tmp/error-output.txt", "a") // stderr is a file to write to 
); 

$cmd = "wget $url"; 

$proc_handle = proc_open($cmd, $pipe_descriptions, $pipes); 

if(is_resource($proc_handle)) 
{ 
    // Your process is running. You may now read it's output with fread($pipes[1]) and fread($pipes[2]) 
    // Send input to your program with fwrite($pipes[0]) 
    // remember to fclose() all pipes and fclose() the process when you're done! 
+0

ああ、リモートアクセスの場合、SはC(x)に接続し、SSH鍵を設定し、 "$ cmd to:ssh hostname.of.c wget $ url"を設定します。 – Josh

0

作業中の既存のPHPコードがありますか?

+0

現時点では、ちょうどその始まりですが、私はコンソールの出力を読むことができない場合は何かに切り替える必要があります。 –

関連する問題