안녕하세요,
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; // 반복문 밖에서 선언... 이렇게 하는거 맞...죠?
?>
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으로 뱉어낸다는게..
댓글 6
음... 저런 방식으로 "실시간"을 구현하는 것은 서버 터지는 지름길이긴 합니다만...
포인트 모듈은 성능 개선을 위해 최근에 불러온 포인트를 기억해 두었다가 그대로 반환하도록 되어 있습니다. 한 요청이 끝난 후(현재 실행중인 PHP 파일이 끝난 후)에야 갱신됩니다. 같은 파일에서 호출하는데 매번 포인트를 새로 불러오도록 하려면 아래와 같이 true를 넘겨주면 됩니다.
$pointBalance = $oPointModel->getPoint($member_srl, true);
P.S. 만약 질문하신 분과 100% 동일한 상황이 아닌데 그냥 포인트 불러오는 법을 검색하시다가 나중에 이 댓글을 읽고 계신 분이 있다면, 절대로 true 넣지 마세요. 성능이 나빠집니다.
답변 정말 감사합니다!
포인트를 구입해서 분/초 단위로 시간을 재서 그만큼 포인트를 차감해야 하는데, php 프로그램으로 일처리를 하려다 보니 그렇게 됬네요..
서버사양이 좋다면야 ㅎㅎㅎ
화이팅 입니다 나중에 좋은 작품 나오면 소스 정보좀 공유해주세요 ㅎㅎ