>백엔드 개발 >PHP 튜토리얼 >PHP 프로세스에서 실시간 출력을 얻으려면 어떻게 해야 합니까?

PHP 프로세스에서 실시간 출력을 얻으려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-23 18:34:14554검색

How Can I Get Realtime Output from a PHP Process?

PHP에서 실시간 출력으로 프로세스 실행

PHP에서 프로세스를 실행할 때 해당 출력을 실시간으로 표시하는 것이 바람직할 수 있습니다. 이 기사에서는 exec() 함수와 설명자 사양의 고유한 구성을 사용하여 이를 달성하는 방법을 살펴봅니다.

실시간 출력 캡처

프로세스의 출력을 캡처하려면 실시간으로 다음 설명자 사양을 지정해야 합니다.

$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
);

이 설정은 stdin을 리디렉션합니다. fgets() 함수를 사용하여 stdout에서 실시간으로 읽을 수 있습니다.

예: 실시간 출력을 통한 Ping

이를 시연하려면 메서드를 사용하여 실시간 출력으로 ping 명령을 실행해 보겠습니다.

$cmd = "ping 127.0.0.1";

$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre class="brush:php;toolbar:false">";

if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "
";

이 코드는 각각을 출력합니다. ping 프로세스 라인을 사용할 수 있게 되면 네트워크 트래픽의 실시간 보기를 제공합니다.

프로세스 종료

사용자가 웹 페이지를 떠날 때 프로세스를 종료하는 것은 도전. ping과 같이 오랫동안 실행되는 프로세스의 경우 페이지가 닫힌 후에도 계속 실행될 수 있습니다.

이 문제를 해결하려면 다음 기술을 사용할 수 있습니다.

  • 스크립트가 종료될 때 프로세스를 명시적으로 종료하려면 proc_terminate()를 사용하세요.
  • pcntl_signal()을 사용하면 페이지를 떠나는 사용자를 잡아서 프로세스를 종료할 수 있습니다.
  • 프로세스에 대한 시간 제한을 설정하고 지정된 기간이 지나면 자동으로 종료합니다.

이러한 방법을 구현함으로써 개발자는 PHP 스크립트에서 시작된 프로세스가 제대로 작동하는지 확인할 수 있습니다. 사용자가 페이지에서 다른 곳으로 이동할 때 처리됩니다.

위 내용은 PHP 프로세스에서 실시간 출력을 얻으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.