개발개발/PHP

flush 함수 사용시 유의사항

꾸냥 2009. 1. 20. 03:16
반복문을 사용중 진행상황을 파악하기 위해 flush 를 사용했는데. 짧은 문구의 경우 몇개의 문구들이 겹쳐 나오고 한개씩은 출력이 안되는 문제가 발생하였다.
해당 부분의 원인을 파악하려 몇가지 테스트를 하였는데


위의 방식대로 입력을 할 경우 익스6(IE6) 에서는 반복문이 끝나야 해당 구문이 출력된다. 원하는건 한번 돌때마다 출력되는 방식이라 sleep(1); 과 flush(); 의 위치 차이에서 오는 결과인가? 하는 의문에 위치를 바꿔보았지만 별다른 차이가 없었다.
(불여우에서는 하나하나 잘 출력이 되었다.)

혹 다른 이유에서인가? 라는 의문에 이곳저곳 뒤지기 시작하였다. 그러다 걸린 이야기가

"브라우저에서 쓰이는 버퍼의 문제로 출력 결과가 예상과 달라진다!" 라는 것이다.

익스 에서는 256byte 이상이 버퍼에 들어가야 출력된다. 라고 한다. 해당 코드 출력하는 부분에 str_pad(" ", 256); 으로 공백을 추가하면 원하는 결과를 얻을 수 있다.

참고로 익스 의 경우 테이블 테그가 끝나기 전에는 flush 를 사용해도 해당 구문이 출력되지 않는다고 한다.
덧붙여서 아직 제대로 테스트한게 아니라서 그런지 이런저런 불편한점이 조금 보이는것 같다. 정확히 원하는 갯수대로 출력이 안된다고 할까? 그래서 난.... 불여우를 쓰기로 했다. 이럼 간단~
반응형