안녕하세요,
XE에서 로그인한 회원의 포인트 정보를 '실시간'으로 불러오고 싶습니다.
아래처럼 PHP를 짜봤지만, 포인트 변동이 있어도 처음 불러온 포인트를 그대로 뱉어내더라고요.
<?php ini_set('max_execution_time', 10); // 테스트를 위해 10초만 동작 define('__XE__', true); require_once("../../config/config.inc.php"); // 파일의 위치에 따라 수정 $oContext = &Context::getInstance()->init(); $logged_info = Context::get('logged_info'); $member_srl = $logged_info->member_srl; // 회원번호를 로그인 세션에서 가져옴 $oPointModel = &getModel('point'); $pointBalance = $oPointModel->getPoint($member_srl); // 회원의 포인트를 불러옴 while ($pointBalance > 0) { // 포인트가 0 초과인 경우 print $pointBalance . "<br />"; session_write_close(); // 다른 서버 요청들을 위해 세션 닫음 usleep(100000); // 0.1초 sleep session_start(); // 세션 다시 열음 $pointBalance = $oPointModel->getPoint($member_srl); // 포인트 다시 불러움... 근데 여기서 막힘. } echo $pointBalance; // 반복문 밖에서 선언... 이렇게 하는거 맞...죠? ?>
뭘 어찌해야 될지 전혀 감이 안와서 답답합니다 ㅜㅜ
PHP 밖에서 선언을 다시 해줘야 한다고 아는데...
음... 안먹힙니다 ㅜㅜ
도와주세요!! ㅠㅠ
추가:
작동하면 10초 뒤에, 읽어들인 포인트를 뱉어냅니다.
예를들어 제 포인트가 30이면,
30
30
30
...
이런식으로요.
문제는 중간에 포인트 변동이 있어도 계속 30으로 뱉어낸다는게..
음... 저런 방식으로 "실시간"을 구현하는 것은 서버 터지는 지름길이긴 합니다만...
포인트 모듈은 성능 개선을 위해 최근에 불러온 포인트를 기억해 두었다가 그대로 반환하도록 되어 있습니다. 한 요청이 끝난 후(현재 실행중인 PHP 파일이 끝난 후)에야 갱신됩니다. 같은 파일에서 호출하는데 매번 포인트를 새로 불러오도록 하려면 아래와 같이 true를 넘겨주면 됩니다.
$pointBalance = $oPointModel->getPoint($member_srl, true);
P.S. 만약 질문하신 분과 100% 동일한 상황이 아닌데 그냥 포인트 불러오는 법을 검색하시다가 나중에 이 댓글을 읽고 계신 분이 있다면, 절대로 true 넣지 마세요. 성능이 나빠집니다.