은 가능한 스트림과 같은 방식으로 PHP의 표준 출력의 데이터를 필터링하는 것입니다 :PHP의 표준 출력 데이터를 스트리밍 필터링하는 방법은 무엇입니까?
standard output ⟶ output filter ⟶ standard output
이미 ob_start
알고 있어요. 하지만 나는 한 번에 전체 출력을 처리하려고하지 않고 php_user_filter 또는 비슷한 것을 사용하여 스트림과 같은 방식으로 처리하려고합니다.
은 가능한 스트림과 같은 방식으로 PHP의 표준 출력의 데이터를 필터링하는 것입니다 :PHP의 표준 출력 데이터를 스트리밍 필터링하는 방법은 무엇입니까?
standard output ⟶ output filter ⟶ standard output
이미 ob_start
알고 있어요. 하지만 나는 한 번에 전체 출력을 처리하려고하지 않고 php_user_filter 또는 비슷한 것을 사용하여 스트림과 같은 방식으로 처리하려고합니다.
나는 이것이 무엇인지 이해하지 못했지만 대답을 게시하지 않을 이유가 없습니다.
ob_start()
콜백을 사용하고 부분 콘텐츠를 처리 할 수 있습니다. 당신이해야 할 일은 초기화 후 바로 ob_implicit_flush()
입니다. 이제 일반적으로 콜백은 간단한에서 아웃 기능이지만, 함께 원하는대로 당신은 복잡한 만들 수 있습니다
class ob_callback {
function __invoke($part, $end_flag_0x04) {
return "+$part";
// or map to $stream->filter($in, $out, &$consumed, $closing)
}
function __destruct() { /* cleanup */ }
}
ob_start(new ob_callback, 2);
ob_implicit_flush(TRUE);
내가 스트림-Y 사용은 다음과 같은 형태가 될 것이다 확실하지 않다. 하지만 PHP 표준 출력을 가로채는 다른 방법은 없다고 생각합니다. 암시 적 플러시는 CLI에서 작동하지 않습니다.
질문을 올바르게 이해하면 ob_start()
, $chunk_size
에 두 번째 인수를 사용할 수 있습니다.
ob_start('my_callback', 1024);
상기 예 my_callback()
마다 출력 도달 또는 1 킬로바이트 초과 버퍼 발생 부를 것이다. 별도의 진술에서 수 킬로바이트를 뱉어 내면 my_callback()
가 여러 번 트리거됩니다. 단일 문자열로 몇 킬로 바이트를 출력하는 경우에는 유용하지 않습니다. my_callback()
은 출력마다 한 번만 트리거 될 수 있기 때문에 유용하지 않습니다.
그래서 표준 출력으로 변경되는 콜백을 정의하는 것이 무엇입니까? 그렇다면 콜백은 언제 호출 될까요 (얼마나 자주)? – Jon
@ 존 : 호출 횟수는 출력 덩어리의 수 (예 :'echo' 매개 변수, 출력 행 또는 일부 내부 버퍼 등)에 따라 달라질 수 있습니다. 또는 그것은 단지 한 번 호출되며 각 청크를 처리하는 준 무한 루프 동안 검사 할 수있는 스트림 상태가 있습니다. – Gumbo