2011-02-13 8 views
1

정확히 passthru()은 무엇을하고 있는지 알고 싶습니다.패스 쓰루()는 어떻게 작동합니까?

비슷한 기능을 가진 자체 기능을 만들어야하지만 기능이 어떻게 작동하는지 이해할 수 없습니다.

+2

PHP 소스를 참조하여 다른 사람에게 대신 요청할 수 있습니다. 왜 비슷한 기능을 가진 자신 만의 함수를 만들고 싶습니다. 왜이 함수가 당신에게 적합하지 않습니까? –

+1

'passthru '는 궁극적으로 C로 작성되었습니다. 답변이 C 내부 구조 또는 "PHP 수준"설명과 관련이 있습니까? – deceze

+0

PHP 레벨하시기 바랍니다. PHP에서이 기능을 다시 만들어야합니다. 내 목표는 출력을'php : // stdout'이 아닌 임의의 파일로 전달하는 것입니다. – yegor256

답변

0

passthru의 내부 구조는 PHP에서 재현하기에는 너무 낮은 수준이므로 많은 도움이되지 않습니다.

제 목표는 출력을 php : // stdout이 아닌 임의의 파일로 전달하는 것입니다.

전체 출력을 변수로 먼저 읽지 않고 PHP 레벨에서 이것을 수행하려면 popen과 같은 것이 좋습니다. 이렇게하면 프로세스를 가리키는 포인터를 열어 조금씩 읽을 수 있고 파일에 데이터를 조금씩 쓸 수 있습니다 (실제로는 passthru에 거의 가깝습니다). 예 :

while (($buffer = fread($p, 1024)) !== false) { 
    fwrite($file, $buffer); 
} 

어쨌든 명령 줄에서 작업하는 경우 파일에 쓰지 않는 이유는 무엇입니까?

exec('command > file'); 
0

명령을 실행 한 후에 이진 데이터를 표시해야합니까?

어떻게 표준 동작으로 변경 하시겠습니까?

내가 아는 한 passthru()는 exec() 및 system()과 유사하게 작동하지만 이진 데이터의 처리/표시도 허용하므로 내 추측에 따르면 경유 출력) 명령을 직접 바이너리 스트림에 보낸다.

http://php.net/manual/en/function.passthru.php을 참조하십시오.

나는 이것이 도움이되기를 바란다. 그렇지 않으면 나는 하향 투표를 할 자격이있다.

+0

'passthru()'는'php : // stdout'에 결과를 보냅니다. 나는 그것을 정상적인 파일로 전달하는 데 관심이있다 .. – yegor256

+0

http://chipmunkninja.com/Program-Execution-in-PHP%[email protected]을 보라. – Koekiebox

1

shell_exec을 사용하고 >> file을 추가하면 어떨까요?

function exec_to_file($cmd,$file){ 
    shell_exec(escapeshellcmd($cmd) . ' >> ' . $file); 
} 
0

ext/standard/exec.c에서 찾아 볼 수있다 경유하는 소스 - 실제로 꽤 읽을 수있어 직접 PHP에서 자신의 버전을 작성할 수 있어야한다.

당신이해야 할 일은 단지 popen을 사용하여 프로세스를 연 다음 다른 파일 핸들과 마찬가지로 출력을 읽을 수 있습니다.