php 에서의 flush , sleep 사용시 주의사항
페이지 정보
작성자 서방님 댓글 0건 조회 144회 작성일 11-07-13 11:38본문
php 의 함수중 하나인 flush , sleep 의 사용에 있어서 참고사항.
어찌보면 중요한 사항은 아니지만, 작동에 이상이 있는 경우 살펴볼 사항을 정리한다.
서버푸시 방법에 주로 쓰이는 flush, sleep(usleep 은 micro second)
sleep(1) == usleep(1000000)
작은 차이로 인해, 예상했던 결과가 나오지 않는 경우 참조할 사항들을 몇가지 정리한다.
예를 들어 다음과 같은 코드가 있다.(kr.php.net : sleep 함수 예제
)
10초간 지연되었다가, 다음 date 내용이 출력될 것으로 예상할 것이다.
그 답은 맞기도 하고 틀리기도 하다. 즉, 상황에 따라 다르다.
php console 에서 실행시키면 잘 나올 것이다.
그런데, 브라우저에서 해당 코드를 실행시키면 나오지 않을 수도 있다.
sleep() 코드 위에 flush() 를 넣으면 되기도 하지만, 아닐 수도 있다.
그것은 왜 그럴까?
# 버퍼에 작동방식(?)에 따라 다르다.
브라우저에서 실행되는 경우를 살펴보면
그리고 해당 버퍼는 웹서버, php , 브라우저 마다 다르게 된다.
IE 의 경우는 256 byte 이상의 버퍼가 찬 후에 해당 코드가 적용된다.
위 코드 위에
# 또 브라우저의 HTML 코드 랜더링 방법의 차이로 인해 달라지는 경우도 있다.
어찌보면 중요한 사항은 아니지만, 작동에 이상이 있는 경우 살펴볼 사항을 정리한다.
서버푸시 방법에 주로 쓰이는 flush, sleep(usleep 은 micro second)
sleep(1) == usleep(1000000)
작은 차이로 인해, 예상했던 결과가 나오지 않는 경우 참조할 사항들을 몇가지 정리한다.
php 함수를 쓰다보면, 간혹 그런 경우가 있다.
그런 사항들을 발견하는데로 시리즈(?)로 정리를 해보도록 한다.
강좌로 하기에는 너무 자잘한 것들이고, 팁정도면 적당하겠다.(그것도 1원짜리팁 ^^)
예를 들어 다음과 같은 코드가 있다.(kr.php.net : sleep 함수 예제

- <?php
- // current time
- echo date('h:i:s') . "\n";
- // sleep for 10 seconds
- sleep(10);
- // wake up !
- echo date('h:i:s') . "\n";
- ?> <?php// current timeecho date('h:i:s') . "\n";// sleep for 10 secondssleep(10);// wake up !echo date('h:i:s') . "\n";?>
그냥 코드를 보고 출력을 예상하길 첫번째 date 내용이 출력되고
그 답은 맞기도 하고 틀리기도 하다. 즉, 상황에 따라 다르다.
php console 에서 실행시키면 잘 나올 것이다.
그런데, 브라우저에서 해당 코드를 실행시키면 나오지 않을 수도 있다.
sleep() 코드 위에 flush() 를 넣으면 되기도 하지만, 아닐 수도 있다.
그것은 왜 그럴까?
# 버퍼에 작동방식(?)에 따라 다르다.
브라우저에서 실행되는 경우를 살펴보면
브라우저 <--> 웹서버 <--> php 모듈 <--> php 코드
의 경로를 통해 실행이 된다. 이 때 출력되는 데이터는 버퍼에 따라 다르게 처리된다.그리고 해당 버퍼는 웹서버, php , 브라우저 마다 다르게 된다.
IE 의 경우는 256 byte 이상의 버퍼가 찬 후에 해당 코드가 적용된다.
위 코드 위에
echo str_pad(" " , 256);
같은 코드로 빈 공백을 먼저 출력해 주고 실행해 보면 정상작동 한다.# 또 브라우저의 HTML 코드 랜더링 방법의 차이로 인해 달라지는 경우도 있다.
- <?php
- echo "<table>";
- while($i<10)
- {
- echo "<tr><td>";
- echo "$i Line : 1초마다 출력됩니다.";
- echo "</td></tr>";
- flush();
- sleep(1);
- $i++;
- }
- echo "</table>";
- ?> <?phpecho "<table>";while($i<10){ echo "<tr><td>"; echo "$i Line : 1초마다 출력됩니다."; echo "</td></tr>"; flush(); sleep(1); $i++;}echo "</table>";?>
다음과 같은 코드가 있다. 1초마다 한 라인씩 출력되는 것을 예상하는가?
그런데, IE 에서는 10초후에 한번에 출력된다.
그것은 IE 의 table 태그 해석의 차이때문이다.
IE 는 <table> 태그후에 </table> 이 나올때까지 브라우저에 표시하지 않는다.
(파이어폭스 등 모질라 계열은 바로 보여준다)
그외 더 있는지 살펴보고 추가할 것은 추가할 예정.
댓글목록
등록된 댓글이 없습니다.