일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Eclipse
- 공모주 청약
- 공모주 청약 일정
- 자바스크립트
- MYSQL
- java
- php
- 맥
- css
- linux
- 리눅스
- Stock
- 오라클
- 자바
- 주식
- jquery
- 6월 공모주 청약 일정
- html
- Oracle
- 제이쿼리
- 7월 공모주 청약 일정
- 주식 청약 일정
- 공모주
- IPO
- codeigniter
- Stock ipo
- JavaScript
- SQL
- 주식 청약
- 코드이그나이터
- Today
- Total
개발자의 끄적끄적
[php] serialize() 직렬화(일렬화) , unserialize() 직렬화된 데이타를 일반배열로 변환 [펌] 본문
[php] serialize() 직렬화(일렬화) , unserialize() 직렬화된 데이타를 일반배열로 변환 [펌]
serialize
(PHP 4, PHP 5)
PHP 변수들을 string 으로 만들어 주는 함수입니다.
쉽게 이야기하면 POST, GET으로 넘어온 배열값을 직렬화(일렬화) 시켜주는 기능입니다.
예전에는 DB를 이용한 세션처리에 주로 사용되었던 함수인데 보통 검색필드로 사용되지 않는 속성을 바꾸는데 사용합니다.
xe에서도 자주 사용하고 있지요!
string serialize ( mixed $value )
값의 저장 표현을 생성합니다.
이는 PHP 값을 저장하거나 전달할 때 자료형이나 구조를 잃어버리지 않게 합니다.
직렬화(일렬화)된 문자열을 다시 PHP 변수로 만드려면, unserialize()를 사용합니다.
serialize 유의점?
1) db 필드의 속성을 text형으로 해야 많은 양을 소화할수 있습니다.
2) 검색에 사용되는 필드에 사용하면 안되며 검색이 불가능하기 때문입니다.
3) 데이타가 많아질때는 addslashes()처리를 안하면 값이 제대로 안들어가집니다.
addslashes() 참조 : http://php.net/manual/kr/function.addslashes.phpViewer
serialize 데이타 형식
a:10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";}
O:8:"stdClass":10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";}
참 보기가 난해하네요!
일반배열형태를 serialize() 직렬화(일렬화)를 하고 나면 아래와 같이 데이타가 바뀌는데 참 보기가 복잡하네요
참고로 a:10 에서 10은 배열갯수입니다
a:10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php $arr = array( "one"=>"C.m.A 하나", "two"=>"C.m.A 둘", "three"=>"C.m.A 셋", "four"=>"C.m.A 넷", "five"=>"C.m.A 다섯", "six"=>"C.m.A 여섯", "seven"=>"C.m.A 일곱", "eight"=>"C.m.A 여덜", "nine"=>"C.m.A 아홉", "ten"=>"C.m.A 열" ); $test_serialize = serialize($arr); ?>
// 직렬화(일렬화)된 데이타 형태 , xe에서도 사용자확장 변수등에 많이 사용함 <?php echo $test_serialize; ?> a:10: {s:3:"one";s:12:"C.m.A 하 나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다 섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일 곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아 홉";s:3:"ten";s:9:"C.m.A 열";} // 참 보기가 난해하지요 |
stdClass Object 형태일때 배열에 값은 동일하지만 약간 틀리죠. 위와 비교해보세요
참고로 "stdClass":10 에서 10은 배열갯수입니다.
O:8:"stdClass":10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $args = new stdClass; $args->one = "C.m.A 하나"; $args->two = "C.m.A 둘"; $args->three = "C.m.A 셋"; $args->four = "C.m.A 넷"; $args->five = "C.m.A 다섯"; $args->six = "C.m.A 여섯"; $args->seven = "C.m.A 일곱"; $args->eight = "C.m.A 여덜"; $args->nine = "C.m.A 아홉"; $args->ten = "C.m.A 열";
$test_serialize2 = serialize($args); ?>
// 직렬화(일렬화)된 데이타 형태 , xe에서도 사용자확장 변수등에 많이 사용함 <?php echo $test_serialize2; ?> O:8:"stdClass":10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";} |
unserialize
(PHP 4, PHP 5)
unserialize() — 하나의 직렬화(일렬화)된 변수를 받아서 PHP 값으로 변환합니다.
mixed unserialize ( string $str )
하나의 직렬화(일렬화)된 변수를 받아서 PHP 값으로 변환합니다.
반환값은 변환된 값이 반환되며, boolean, integer, float, string, array, object가 될 수 있습니다.
직렬화(일렬화)값을 unserialize()를 이용 변환하기
참고로 a:10 에서 10은 배열갯수입니다
a:10: {s:3:"one";s:12:"C.m.A 하 나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다 섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일 곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아 홉";s:3:"ten";s:9:"C.m.A 열";}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $test_serialize = serialize($arr); 값이 아래 직렬화(일렬화)된 내용입니다.
/****** 값이 아래 직렬화(일렬화)된 내용 a:10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";} */
$test_unserialize = unserialize($test_serialize); // 직렬화된 데이타를 일반 배열로 변환 ?>
변환된 데이타를 print_r 확인
<?php echo print_r($test_unserialize,true);?>
Array ( [one] => C.m.A 하나 [two] => C.m.A 둘 [three] => C.m.A 셋 [four] => C.m.A 넷 [five] => C.m.A 다섯 [six] => C.m.A 여섯 [seven] => C.m.A 일곱 [eight] => C.m.A 여덜 [nine] => C.m.A 아홉 [ten] => C.m.A 열 ) |
stdClass Object 직렬화(일렬화)값을 unserialize()를 이용 변환하기
참고로 "stdClass":10 에서 10은 배열갯수입니다.
O:8:"stdClass":10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $test_serialize2 = serialize($args); 값이 아래 직렬화(일렬화)된 내용입니다.
/****** 값이 아래 직렬화(일렬화)된 내용 O:8:"stdClass":10:{s:3:"one";s:12:"C.m.A 하나";s:3:"two";s:9:"C.m.A 둘";s:5:"three";s:9:"C.m.A 셋";s:4:"four";s:9:"C.m.A 넷";s:4:"five";s:12:"C.m.A 다섯";s:3:"six";s:12:"C.m.A 여섯";s:5:"seven";s:12:"C.m.A 일곱";s:5:"eight";s:12:"C.m.A 여덜";s:4:"nine";s:12:"C.m.A 아홉";s:3:"ten";s:9:"C.m.A 열";} */
$test_unserialize2 = unserialize($test_serialize2); // 직렬화된 데이타를 일반 배열로 변환 ?>
변환된 데이타를 print_r 확인
<?php echo print_r($test_unserialize2,true);?>
stdClass Object ( [one] => C.m.A 하나 [two] => C.m.A 둘 [three] => C.m.A 셋 [four] => C.m.A 넷 [five] => C.m.A 다섯 [six] => C.m.A 여섯 [seven] => C.m.A 일곱 [eight] => C.m.A 여덜 [nine] => C.m.A 아홉 [ten] => C.m.A 열 ) |
참고 addslashes(따옴표, 쌍따옴표) 사용시
1 2 3 4 5 6 7 8 |
$data = serialize($_POST); $data = addslashes($data);
$arr = unserialize($data); foreach ($ar as $key=>$value) { $arr[$key] = htmlspecialchars(stripslashes($value), ENT_QUOTES | ENT_NOQUOTES); } extract($arr); |
'개발 > php' 카테고리의 다른 글
[php] 전화번호 국내 지역화 코드 [펌] (0) | 2020.03.06 |
---|---|
[php] unicode (UTF-8) 인코딩에서 한글 글자수 출력 및 iconv_substr [펌] (0) | 2020.03.03 |
[php] PHP / 함수 / isset() - 설정된 변수인지 확인하는 함수 [펌] (0) | 2020.02.25 |
[php] codeigniter zip library 활용 예제 (0) | 2020.02.16 |
[php] html tag 제거 정규식 (0) | 2020.02.13 |