2011-01-17 7 views
1

검색 엔진에 요청하고 검색 결과에 액세스하고 결과에서 일부 세부 정보를 추출한 다음보다 유용한 형식으로 인쇄하는 PHP 스크립트를 작성했습니다.PHP로 스트리밍 인쇄

모두 제대로 작동하지만 우연히 발견 한 것은 데이터를 스트리밍 할 때까지 기다리는 동안 에코 또는 프린트를 호출하면 출력이 스트리밍 될 수 있다는 것입니다. 특히 여러 페이지의 결과가 있으므로 첫 번째 페이지에 액세스하여 내용을 읽고 다시 인쇄 한 다음 다음 페이지로 이동하고 다음 페이지가로드되기를 기다리는 동안 이전 페이지의 콘텐츠가 표시됩니다. 브라우저.

내가 이해가 가지 않는 이유는 왜 이렇게 일관성이 없는지입니다. 다음 페이지로 이동하기 전에 정확하게 한 페이지 만 인쇄되기도하고 경우에 따라서는 때로는 적게 인쇄되기도합니다. 그 다음에 기본적으로 동일한 작업을 수행 할 때마다 (각 결과가 가리키는 페이지에서 읽음) 결과가 거의 스트리밍되지 않고 매분마다 다시 그려집니다.

저는 file_get_contents($url)을 사용하여 내용을 검색하고 echo이 포함 된 함수를 호출하여 지금까지로드 된 내용을 인쇄합니다. 이 스트리밍 인쇄 동작은 브라우저의 기능이며 PHP에서 작성한 것과 독립적입니다. 그렇지 않다면, 어떻게 더 잘 통제 될 수 있습니까?

답변

5

가장 쉬운 해결 방법은 output buffering입니다. 기본 아이디어는 스크립트 시작 부분에 ob_start()으로 전화 한 다음 페이지 콘텐츠를 클라이언트로 보낼 때 ob_end_flush()으로 전화하는 것입니다. 이렇게하면 프로그램에서 보낼 때까지 모든 출력이 저장됩니다.

+0

고마워, 확실히 내가 찾고 있던 것 같지만 여전히 예상대로 작동하지 않습니다. 나는 문서와 주석을 읽었으며 처음에는 백 번을 모두 플러시했고 흥미로운 모든 인쇄 후에는 ob_flush()를 사용했지만 여전히 이상한 간격 (페이지 당 10 개가있을 때마다 13 개의 결과)으로 인쇄합니다. 청크 크기에 문제가있을 수 있습니까? php.ini에서 3 바이트로 설정 했으므로 고정해야합니다. 어쩌면 서버를 다시 시작해야합니다 ... – orlade

+0

알고리즘에 문제가있을 수 있습니까? 그렇지 않으면 왜 13 개의 결과가 모두 인쇄 될지 확신 할 수 없습니다. 어쩌면 웹 서버에서 이상한 일이 벌어지고있는 것일까 요? – GWW

+1

아, 알겠습니다. 나는 ob_flush();을 호출하고, flush();를 호출해야만했다. (나는 믿는다.) 하나 또는 다른 것이 아니라, 매번 그렇게해야했다. 혼란스러워. 감사합니다! – orlade