0) { ob_end_clean(); } @ob_implicit_flush(true); // 짧은 timeout 으로 충분 — probe 자체가 즉시 종료 (sleep 2초 포함) @set_time_limit(10); ignore_user_abort(false); // Phase 1 — 즉시 송신 echo "event: probe\n"; echo 'data: '.installer_json_encode(['phase' => 1, 'server_ts' => microtime(true)], JSON_UNESCAPED_UNICODE)."\n\n"; @flush(); // 클라이언트는 두 phase 도착 시각 차이로 streaming 호환성 판정. // streaming 환경은 약 2초 간격으로 도착 / buffer 환경은 거의 동시 도착. sleep(2); // Phase 2 — 송신 후 즉시 종료 echo "event: probe\n"; echo 'data: '.installer_json_encode(['phase' => 2, 'server_ts' => microtime(true)], JSON_UNESCAPED_UNICODE)."\n\n"; @flush(); exit;