PHP 로직 실행과정을 웹페이지에 런타임현시
이미 Q&A에 질문이 있어 답글을 올렸지만 모두가 알고 이용하는게 좋을 상 싶어 여기서 별도로 다시 글을 올립니다.
실례를 든다면, 이미지를 업로드 하면 PHP쪽에서 upload.php파일이
1. 리사이즈 (로직실행시간 500ms) echo "이미지 리사이징하고 있습니다.";
2. 서버에 저장 (로직실행시간 100ms) echo "서버에 저장중입니다.";
3. 디비에 등록 (로직실행시간 30ms) echo "디비에 이미지정보를 등록하고 있습니다.";
4. 결과 출력 (로직실행시간 10ms) echo "조작완료";
이런 4개의 단계가 작동한다고 가정하면
요청접수하여 시작부터 마지막 로직까지 출력하는데 모두 640ms 로, 매 로직별러 echo 한 글짜가 출력되는게 아니라, 4번단계까지 다 실행되어 웹페이지에 한번에
[code]
이미지를 리사이징하고 있습니다.
서버에 저장중입니다.
디비에 이미지정보를 등록하고 있습니다.
조작완료
[/code]
출력되어집니다.
그러나 원코저 하는것은
매 단계에서 웹브라우저에
1. 이미지를 리사이징하고 있습니다.
2. 서버에 저장중입니다.
3. 디비에 이미지정보를 등록하고 있습니다.
4. 조작완료
이런식으로 매 단계로직이 실행될때마다 웹브라우저에 출력시키는 문제입니다.
이 문제를 해결하자면 PHP의 버퍼기능을 사용합니다.
ob_로 시작되는 PHP함수들은 모두 버퍼기능에 연관있는 함수들입니다.
[code]
/**
* 실행시간이 오랜 어떤 로직이 도중도중 어떤 부분을 실행중인가를 동적으로 출력할 필요가 있을때 이 메소드를 사용하면 된다.
* 수많은 공백을 덧붙이는것은 어떤 경우(Browser종류나, 서버형태 등)에는 하나씩하나씩 실시간 출력이 안될때도 있기때문이다.
* @param $msg 출력값
* @param $whitespace 공백개수
*/
function obfPrint($msg, $whitespace=5000) {
$out = $msg.str_repeat(" ", $whitespace);
echo $out;
@ob_end_flush();
@ob_flush();
@flush();
@ob_start();
}
// 1초간격으로(PHP에서 실행중인 로직이 1초걸린다고 가정) $i값 동적으로 출력
for ($i=0;$i<10;$i++)
{
obfPrint($i."</br>",0);
usleep(1000000);
}
[/code]
코드를 한번 실행 해 보시면 이해가 더 잘 되십니다.
따라서 위의 실례 역시 obfPrint() 를 쓰면 런타임 출력문제가 해결됩니다.
[code]
// 1. 이미지 리사즈 로직 부분
obfPrint('이미지를 리사이징하고 있습니다.');
// 2. 서버 저장 로직 부분
obfPrint('서버에 저장중입니다.');
// 3. 디비에 이미지정보 등록 로직부분
obfPrint('디비에 이미지정보를 등록하였습니다.');
// 4. 조작완료 로직부분
obfPrint('조작을 완료하였습니다.');
[/code]
이해가 되시는죠? 한가지 참고드릴것은 런타임 현시는 PHP로직실행시간이 어느정도 걸릴때 효과가 있고 빠른 로직실행이라면 그냥 echo 로 단번에 출력된것처럼 보입니다.
마지막까지 봐주셔서 감사합니다.
댓글 2개
게시판 목록
개발자팁
질문은 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 116 | MySQL | 20년 전 | 5875 | ||
| 115 | PHP | 20년 전 | 5418 | ||
| 114 | MySQL | 20년 전 | 6568 | ||
| 113 | 기타 | 20년 전 | 15263 | ||
| 112 | 기타 | 20년 전 | 4526 | ||
| 111 | 기타 | 20년 전 | 5208 | ||
| 110 | 기타 | 20년 전 | 4787 | ||
| 109 | 기타 | 20년 전 | 4376 | ||
| 108 | 기타 | 20년 전 | 4217 | ||
| 107 | JavaScript | 20년 전 | 4446 | ||
| 106 | 기타 | 20년 전 | 4323 | ||
| 105 | MySQL |
|
20년 전 | 4892 | |
| 104 | 기타 | 20년 전 | 7086 | ||
| 103 | 기타 | 20년 전 | 5702 | ||
| 102 | JavaScript | 21년 전 | 7987 | ||
| 101 | 기타 | 21년 전 | 10109 | ||
| 100 | 기타 | 21년 전 | 24895 | ||
| 99 | PHP | 21년 전 | 8945 | ||
| 98 | MySQL | 21년 전 | 4956 | ||
| 97 | 기타 | 21년 전 | 5825 | ||
| 96 | JavaScript |
prosper
|
21년 전 | 3901 | |
| 95 | PHP |
prosper
|
21년 전 | 5859 | |
| 94 | 기타 |
아우겐나이스
|
21년 전 | 4475 | |
| 93 | 기타 | 21년 전 | 4118 | ||
| 92 | 기타 | 21년 전 | 3813 | ||
| 91 | 기타 | 21년 전 | 3924 | ||
| 90 | JavaScript | 21년 전 | 4987 | ||
| 89 | 기타 | 21년 전 | 3687 | ||
| 88 | 기타 | 21년 전 | 3242 | ||
| 87 | 기타 | 21년 전 | 3455 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기