총 결 대비 phop 의 다양한 직렬 화

3173 단어 php서열 화대비
머리말
직렬 화 는 대상 상 태 를 유지 하거나 전송 가능 한 형식 으로 바 꾸 는 과정 이다.직렬 화 와 상대 적 으로 반 직렬 화 는 흐름 을 대상 으로 전환한다.이 두 과정 을 결합 하면 데 이 터 를 쉽게 저장 하고 전송 할 수 있다.
대상 의 상태 정 보 를 저장 하거나 전송 할 수 있 는 창 으로 변환 하 는 과정.직렬 화 기간 에 대상 은 현재 상 태 를 임시 또는 영구적 저장 소 에 기록 합 니 다.이후 저장 소 에서 읽 거나 반 직렬 화 대상 의 상 태 를 통 해 이 대상 을 다시 만 들 수 있 습 니 다.
일반적으로 대상 인 스 턴 스 의 모든 필드 가 직렬 화 되 는데 이것 은 데이터 가 인 스 턴 스 의 직렬 화 데이터 로 표시 된다 는 것 을 의미한다.이 형식 을 설명 할 수 있 는 코드 는 이 데이터 의 값 을 확인 할 수 있 으 며,이 구성원 의 접근 성에 의존 하지 않 을 수 있 습 니 다.이와 유사 하 게 반 직렬 화 는 직렬 화 된 표현 형식 에서 데 이 터 를 추출 하고 대상 상 태 를 직접 설정 하 는 것 도 접근 가능 한 규칙 과 무관 하 다.중요 한 보안 데 이 터 를 포함 할 수 있 는 모든 대상 에 대해 가능 하 다 면 이 대상 을 직렬 화 할 수 없 게 해 야 한다.직렬 화 할 수 있 는 중요 한 데 이 터 를 저장 하기 위해 특정 필드 를 만들어 보 세 요.이 를 실현 할 수 없다 면 이 데 이 터 는 직렬 화 권한 을 가 진 코드 에 공개 되 고 악성 코드 가 이 권한 을 얻 지 않도록 해 야 한다.
serialize 와 unserialize 함수
이 두 가 지 는 직렬 화 와 반 직렬 화 PHP 에서 데 이 터 를 자주 사용 하 는 함수 입 니 다.PHP 의 값 을 저장 하거나 전달 하 는 데 유리 하 며 유형 과 구 조 를 잃 지 않 습 니 다.

<?php

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');

//     
$s = serialize($a);
echo $s;
//    :a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}

echo '<br /><br />';

//    
$o = unserialize($s);

print_r($o);
//     Array ( [a] => Apple [b] => banana [c] => Coconut )

?>
배열 값 이 작은 따옴표,작은 따옴표,짝 퉁 등 문 자 를 포함 할 때 반 직렬 화 되면 문제 가 발생 할 수 있 습 니 다.이 문 제 를 극복 하기 위해 교묘 한 기 교 는 사용base64_encodebase64_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)));
}
json_encode 와 jsondecode
JSON 형식의 서열 화 와 반 서열 화 를 사용 하 는 것 은 좋 은 선택 이다.
사용json_encodejson_decode형식 으로 출력serializeunserialize형식 이 훨씬 빠르다.
     (1)JSON형식 은 읽 을 수 있다.
     (2)JSON형식 은serialize반환 데이터 결과 보다 작다.
     (3)JSON형식 은 개방 적 이 고 이식 가능 하 다.다른 언어 도 사용 할 수 있다.

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
 
//     
$s = json_encode($a);
echo $s;
//    :{"a":"Apple","b":"banana","c":"Coconut"}
 
echo '<br /><br />';
 
//    
$o = json_decode($s);
위의 예 에서json_encode수출 길 이 는 이전 예 에서serialize수출 길이 보다 현저히 짧다.주의해 야 할 것 은json_encode대상 을 서열 화 할 수 없다 는 것 이다.
총결산
이상 이 이 글 의 전부 입 니 다.여러분 이 좋아 하고 도움 을 주 셨 으 면 좋 겠 습 니 다.문제 가 있 으 면 댓 글로 토론 할 수 있다.

좋은 웹페이지 즐겨찾기