이 기능은 지정된 초 및 나노초의 스크립트를 일시 중지합니다. 수면 과 수면 보다 정확도가 높으며 더 미세한 대기 시간 제어가 필요한 시나리오에 적합합니다.
ob_flush ()
PHP의 출력 버퍼 함량을 브라우저로 강제하지만 버퍼를 닫지 않습니다. Flush () 와 함께 사용하면 컨텐츠를 실시간으로 "푸시"할 수 있습니다.
참고 : 출력이 실제로 브라우저에 도달하도록하기 위해 일반적으로 Flush () 와 함께 사용되며 서버와 브라우저 측면에서 캐싱 및 압축을 비활성화 할 수 없습니다.
<?php
// 스크립트 실행 시간 제한을 닫습니다(필요에 따라)
// set_time_limit(0);
// 출력 버퍼링을 켭니다
ob_start();
// 브라우저 캐싱 및 압축을 비활성화합니다,즉각적인 데이터 전송을 확인하십시오
header("Content-Type: text/plain");
header("Cache-Control: no-cache");
header("X-Accel-Buffering: no"); // ~을 위한 Nginx 캐시를 비활성화합니다
// 폐쇄 gzip 압축(기본적으로 서버가 켜져있는 경우)
// 특정 방법은 서버 환경에 따라 구성됩니다
for ($i = 1; $i <= 5; $i++) {
echo "현재 단계:{$i}\n";
// 강제 새로 고침 PHP 출력 버퍼
ob_flush();
flush();
// 사용 time_nanosleep 마이크로 초 지연,0.5두번째 = 500,000,000 纳두번째
time_nanosleep(0, 500000000);
}
echo "모든 단계가 완료됩니다!\n";
?>
OB_START () : 버퍼 플러싱을 제어 할 수 있도록 출력 버퍼링을 시작하십시오.
Echo : 출력 정보를 하나씩 출력합니다.
OB_FLUSH () + flush () : 버퍼 컨텐츠를 클라이언트로 전송하고 브라우저 디스플레이를 새로 고치십시오.
time_nanosleep (0, 500000000) : 0.5 초 (500,000,000 나노초) 동안 일시 중지하여 출력 효과가 더 명확하고 실시간 프로세스를 시뮬레이션합니다.
브라우저 및 서버 캐시로 인한 컨텐츠 지연을 피하기 위해 HTTP 헤더를 적절하게 설정하십시오.
서버 구성 영향 <br> 서버 (예 : Apache, Nginx)는 기본적으로 출력 압축 또는 버퍼링을 가능하게하여 실시간 출력 효과에 영향을 미칩니다. GZIP 압축을 끄고 캐시 속도를 높이십시오.
브라우저 동작 <br> 일부 브라우저는 특정 크기에 도달 할 때까지 콘텐츠를 축적하며 출력 컨텐츠가 너무 작아지면 즉시 표시되지 않을 수 있습니다. 특정 수의 공백 문자를 출력하여 렌더링을 트리거 할 수 있습니다.
버퍼 크기
PHP의 출력 버퍼와 웹 서버 버퍼의 크기는 출력 속도에 영향을 미칩니다. 버퍼 크기는 실제 조건에 따라 조정할 수 있습니다.
PHP 버전
Time_nanoSleep 은 PHP 5.0.0으로 시작하여 환경이 요구 사항을 충족하는지 확인합니다.
Time_nanoSleep 과 OB_Flush ()를 결합하여 PHP에서 단계별 및 세분화 된 실시간 데이터 출력을 구현하여 장기 스크립트의 진행 상황에 대한 사용자의 인식을 향상시킬 수 있습니다. 이 방법은 간단하고 사용하기 쉽고 지연에 마이크로 초가 필요한 시나리오에 적합합니다.
합리적인 서버 및 브라우저 설정과 결합 된 경우 매우 원활한 실시간 출력 효과를 얻고 사용자 경험을 향상시킬 수 있습니다.