PHP 튜토리얼 - 역직렬화 방법

巴扎黑
풀어 주다: 2016-11-21 09:25:17
원래의
824명이 탐색했습니다.

직렬화는 변수를 저장하거나 전송할 수 있는 문자열로 변환하는 프로세스입니다. 역직렬화는 적절한 시점에 사용할 수 있도록 문자열을 원래 변수로 변환하는 것입니다. 이 두 프로세스가 결합되어 데이터를 쉽게 저장하고 전송하므로 프로그램의 유지 관리가 더욱 쉬워집니다. 브라더스 PHP 훈련 (www.lampbrother.net)
1. 직렬화 및 역직렬화 함수
이 두 가지는 PHP에서 데이터를 직렬화하고 역직렬화하는 일반적인 함수입니다.
$a = array('a' => '사과' ,'b' => '바나나' , 'c' => '코코넛')
/ /배열 직렬화
$s = serialize($a);
echo $s
//출력 결과: a:3:{s:1:"a";s:5:"Apple " ;s:1:"b";s:6:"바나나";s:1:"c";s:7:"코코넛";}
echo '

//역직렬화
$o = unserialize($s)
print_r($o)
//결과 배열( [a] => Apple [ b] = > 바나나 [c] => Coconut )
?>
배열 값에 큰따옴표, 작은따옴표, 콜론 등의 문자가 포함된 경우 역직렬화 후 문제가 발생할 수 있습니다. 이 문제를 극복하기 위한 깔끔한 방법은 base64_encode 및 base64_decode를 사용하는 것입니다.
$obj = array();
//직렬화
$s = base64_encode(serialize($obj))
//역직렬화
$original = unserialize(base64_decode( $s) );
하지만 base64 인코딩을 사용하면 문자열 길이가 늘어납니다. 이 문제를 극복하기 위해 gzcompress와 함께 사용할 수 있습니다.
//객체 직렬화를 위한 함수 정의
function my_serialize( $obj )
{
return base64_encode(gzcompress(serialize($obj)))
}
//역직렬화
function my_unserialize($txt)
{
return unserialize(gzuncompress(base64_decode($txt)));
}
2. json_encode 및 json_decode 사용
JSON 형식 직렬화 및 역직렬화 좋은 선택입니다.
json_encode 및 json_decode 형식 출력을 사용하면 직렬화 및 역직렬화 형식보다 훨씬 빠릅니다.

JSON 형식을 읽을 수 있습니다.

JSON 형식은 직렬화보다 작은 데이터를 반환합니다.

JSON 형식은 개방적이고 이식 가능합니다. 다른 언어도 사용할 수 있습니다.

$a = array('a' => 'Apple' ,'b' => '바나나' , 'c' => '코코넛')

// 직렬화된 배열

$s = json_encode($a);

echo $s

//출력 결과: {"a":"Apple","b " :"banana","c":"Coconut"}

echo '

'

//역직렬화

$o = json_decode($s);

위의 예에서 json_encode 출력 길이는 이전 예의 직렬화 출력 길이보다 확실히 짧습니다.
3. var_export 및 eval
var_export 함수는 변수를 문자열로 출력하고, eval은 문자열을 PHP 코드로 실행하고 역직렬화하여 원래 변수의 내용을 가져옵니다.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut')
//직렬화된 배열
$ s = var_export($a, true);
echo $s
//출력 결과: array ( 'a' => 'Apple', 'b' => 'banana', 'c ' => '코코넛', )
echo '

'
//역직렬화
eval('$my_var=' . $s . ';' );
print_r($my_var);

4. wddx_serialize_value 및 wddx deserialize
wddx_serialize_value 함수는 배열 변수를 직렬화하여 XML 문자열로 출력할 수 있습니다.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut')
//직렬화된 배열
$ s = wddx_serialize_value($a);
echo $s;
//출력 결과(출력 문자열의 소스 코드 보기):

< ; 데이터>Applebanana < ;/var>Coconut
echo '< ; br />
';
//직렬화 해제
$o = wddx_deserialize($s)
print_r($o)//출력 결과: 배열( [a] => 사과 [b] => 바나나 1 =>XML 태그에는 많은 문자가 있으므로 이 형식의 직렬화는 여전히 많은 공간을 차지한다는 것을 알 수 있습니다.

요약
위의 함수는 모두 배열변수를 직렬화할 때는 정상적으로 실행되지만, 객체에 적용할 때는 다릅니다. 예를 들어 json_encode 직렬화된 객체는 실패합니다. 객체를 역직렬화할 때 unserialize와 eval의 효과는 다릅니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿