메뉴 건너뛰기

Dev tips

소켓 에이전트를 만들어서 받는 패킷을 가져올때 fread 로 한번에 가져올수 있다.
이런 경우 특정 바이트가 넘어가면 처리를 못 하는데 php.ini 에서 memory_limit 를 적게 잡아서 그렇다고 한다.
php.ini 를 수정하지 않고 아래처럼 코딩을 바꾸면 된다.

$this->recvpacket = fread($this->fp, $readsize);

//***** Recieve way for Long Packet *****//
$tempcnt = 0;
$tempcntflag = false;
while(!feof($this->fp)) {
        if($tempcntflag && $tempcnt <= strlen($this->recvpacket)) {
                break;
        }
        $this->recvpacket .= fgetc($this->fp);
        if(!$tempcntflag && strlen($this->recvpacket) == 6) {
                $tempcnt = intval(substr($this->recvpacket, 1, 4));
                $this->recvpacket = "";
                $tempcntflag = true;
        }
}
$this->recvpacket = "|".substr("0000".$tempcnt, -4)."|".$this->recvpacket;
//***** Recieve way for Long Packet *****//