2009-08-28 7 views
2

자, 여기 있습니다. 출력 (보통 리눅스 콘솔에서 볼 수있는 출력)을 읽어야합니다. 가장 큰 문제는 선형 실행의 결과를 읽을 필요가 없지만 다소 wget http://ubuntu.com/jaunty.iso과 같으며 ETA를 표시한다는 것입니다.PHP는 콘솔 출력을 읽습니다.

또한, 작업 흐름은 다음과 같다 :

S - 웹 서버

C -

C S의 인트라넷에서 컴퓨터 1 - S의 인트라넷에서 컴퓨터 2

등등.

사용자는 (사용자의 요청에 따라)를 wget, top 콘솔 또는 다른 기록 명령을 시작 C X 연결 S 연결된다. 사용자는 C x에서 "console log"를 볼 수 있으며 wget은 지정된 대상을 다운로드합니다.

그럴까요? 서버/클라이언트 소프트웨어를 사용하지 않고도 완료 할 수 있습니까?

감사합니다.

+0

어떻게 사용자가 서버에 연결합니까? SSH 또는 무엇? – n1313

+0

사용자가 SSH를 통해 연결하지 않습니다. 사용자는 S의 웹 페이지로 이동합니다. 서버는 SSH 또는 독점 서버 소프트웨어를 통해 인트라넷에있는 컴퓨터에 연결되지만 SSH 옵션에 대한 솔루션에 관심이 있습니다. –

답변

3

당신은 이것에 대해 PHP 함수 proc_open을 사용하고 싶을 것입니다. 여러분은 파이프의 배열을 지정할 수 있습니다 (콘솔에 있다면 stdin, 키보드에 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

지금은 아니야, 그 시작에 불과하지만 콘솔 출력을 읽을 수 없다면 뭔가 다른 것으로 전환해야 할까봐 걱정됩니다. –

관련 문제