[PHP] 직렬화(Serializable)
- 공유 링크 만들기
- 이메일
- 기타 앱
[PHP] 직렬화(Serializable)
안녕하세요. 명월입니다.
이 글은 PHP에서 직렬화를 사용하는 방법에 대한 글입니다.
예전에 Java나 C#에서 직렬화에 대한 설명을 한 적이 있습니다.
링크 - [Java] 직렬화(Serializable)
링크 - [C#] 직렬화(Serialization)
직렬화한 클래스나 배열등의 리스트를 바이너리화 하는 것을 직렬화라고 합니다. 솔직히 PHP에서는 이 직렬화를 잘 사용하지는 않습니다.
C#이나 Java에서는 소켓 통신등에서 서버와 클라이언트가 같은 언어라고 했을 때 클래스의 데이터를 그대로 전송하기 위한 목적으로 자주 사용하는데 PHP에서는 소켓 통신을 잘 사용하지 않습니다.
전혀 사용하지 않는 것은 아닙니다만, 거진 PHP와 다른 언어 즉, Java나 C#으로 이루어진 서버 환경과 통신을 하지, 같은 PHP간의 통신은 없다고 봐야 합니다.
왜냐하면 여러 apache로 이루어진 다중 서버라고 한다면 Session share로 넘기는 것이 더 편하기 때문입니다.이 session에 저장할 때 클래스 타입이나 배열 타입을 넣게 되면 이 직렬화로 session에 들어갈 것입니다. 그건 PHP측에서 자동으로 해주기 때문에 프로그래밍을 하는 입장에서는 필요가 없습니다.
그런데도 필요할 때가 있는데, Session간에 데이터를 share링하거나 데이터를 클래스 형식으로 보존해야 할 경우는 사용할 수 있겠네요.링크 - https://www.php.net/manual/en/function.serialize.php
링크 - https://www.php.net/manual/en/function.unserialize.php
count = 0; $this->connectTime = date("Y-m-d h:i:s A"); } // set함수가 호출되면 count는 1이 증가되고 현재 시간의 값을 마지막 접속 시간으로 바꾸고 현재 시간의 값은 새로 넣는다. public function set(){ $this->count = $this->count +1; $this->lastTime = $this->connectTime; $this->connectTime = date("Y-m-d h:i:s A"); } // Count 값을 가져온다. public function getCount(){ return $this->count; } // 마지막 접속 시간을 가져온다. public function getLastTime(){ return $this->lastTime; } } // 직렬화된 클래스 값을 가져온다. function getData($file){ // 파일이 존재하지 않으면 SessionCount라는 클래스를 생성한다. if (!file_exists($file)) { return new SessionCount(); } try{ if(@$handle = fopen($file, 'r')) { $contents = fread($handle, filesize($file)); } // 직렬화된 파일을 역직렬화하여 클래스를 생성한다. return unserialize ($contents); } catch(Exception $e){ print_r($e); die(); } finally{ @fclose($handle); } } // 클래스의 값을 파일로 저장한다. function setData($file, $clz){ try { // 클래스의 값을 직렬화한다. $contents = serialize ($clz); if (@$handle = fopen($file, 'w')) { // 파일로 저장한다. fwrite($handle, $contents); } } catch (Exception $e) { print_r($e); } finally{ @fclose($handle); } } // 직렬화할 데이터를 저장할 경로 $file = 'd:\file\serialize.data'; // 클래스를 가져온다. 만약 파일이 없으면 new로 새로운 할당을 한다. $clz = getData($file); $clz->set(); // 직렬화를 하여 파일로 클래스를 저장한다. setData($file,$clz) ?> title count = getCount()?> last connect Time = getLastTime()?>
접속을 하니 현재 카운터와 마지막 접속 시간이 나옵니다.
직렬화된 파일이 제대로 폴더에 저장이 됩니다. 직렬화된 파일을 보니 데이터가 직렬화 형태의 값으로 저장되어 있습니다.
여기서 제가 새로고침을 몇 번 누르게 되면 카운터는 계속 증가하게 됩니다.
여기까지 PHP에서 직렬화를 사용하는 방법에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
from http://nowonbun.tistory.com/631 by ccl(A)
- 공유 링크 만들기
- 이메일
- 기타 앱
댓글
댓글 쓰기