>  기사  >  백엔드 개발  >  PHP 직렬화 및 역직렬화에 대한 자세한 설명

PHP 직렬화 및 역직렬화에 대한 자세한 설명

墨辰丷
墨辰丷원래의
2018-05-25 14:53:051223검색

이 글에서는 PHP의 직렬화 및 역직렬화 관련 지식을 소개합니다. 매우 좋은 참조 값이 있으므로 아래 편집기를 사용하여 살펴보겠습니다.

복잡한 데이터 유형을 문자열로 압축

serialize() 변수 및 해당 값을 텍스트 형식으로 인코딩

unserialize() 복원 원래 변수

eg:

$stooges = array('Moe','Larry','Curly');
$new = serialize($stooges);
print_r($new);echo "<br />";
print_r(unserialize($new));

결과: a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i: 2;s :5:"Curly";}

Array ([0] => Moe [1] => Larry [2] => Curly )

이 직렬화된 데이터를 URL에 넣을 때 페이지 간을 전달할 때 이 데이터에 있는 URL 메타 문자가 처리되었는지 확인하려면 이 데이터에 대해 urlencode()를 호출해야 합니다.

$shopping = array(&#39;Poppy seed bagel&#39; => 2,&#39;Plain Bagel&#39; =>1,&#39;Lox&#39; =>4);
echo &#39;<a href="next.php?cart=&#39;.urlencode(serialize($shopping)).&#39;" rel="external nofollow" >next</a>&#39;;

margin_quotes_gpc 및 Magic_quotes_runtime 구성 항목의 설정은 unserialize() 데이터에 전달되는 설정에 영향을 미칩니다.

magic_quotes_gpc 항목이 활성화된 경우 역직렬화 전에 URL, POST 변수 및 쿠키에 전달된 데이터를 스트립슬래시()로 처리해야 합니다.

$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启
$new_cart = unserialize($cart);

magic_quotes_runtime이 활성화된 경우 역직렬화하기 전에 직렬화된 데이터를 처리해야 합니다. 파일에 쓰기 전에 addlashes()로 처리하고, 읽기 전에 Stripslashes()로 처리해야 합니다.

$fp = fopen(&#39;/tmp/cart&#39;,&#39;w&#39;);
fputs($fp,addslashes(serialize($a)));
fclose($fp);
//如果magic_quotes_runtime开启
$new_cat = unserialize(stripslashes(file_get_contents(&#39;/tmp/cart&#39;)));
//如果magic_quotes_runtime关闭
$new_cat = unserialize(file_get_contents(&#39;/tmp/cart&#39;));

magic_quotes_runtime이 활성화된 데이터베이스에서 직렬화된 데이터 읽기도 Stripslashes()로 처리해야 하며 직렬화된 데이터를 저장해야 합니다. 데이터베이스에 대한 정보는 적절하게 저장될 수 있도록 addlashes()로 처리되어야 합니다.

mysql_query("insert into cart(id,data) values(1,&#39;".addslashes(serialize($cart))."&#39;)");
$rs = mysql_query(&#39;select data from cart where id=1&#39;);
$ob = mysql_fetch_object($rs);
//如果magic_quotes_runtime开启
$new_cart = unserialize(stripslashes($ob->data));
//如果magic_quotes_runtime关闭
$new_cart = unserialize($ob->data);

객체를 역직렬화할 때 PHP는 자동으로 __wakeUp() 메서드를 호출합니다. 이를 통해 개체는 직렬화 중에 유지되지 않은 다양한 상태를 다시 설정할 수 있습니다. 예: 데이터베이스 연결 등

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.


관련 권장 사항:

PHP 직렬화 및 역직렬화그림과 텍스트를 포함한 기능에 대한 자세한 설명

PHP는 다양한 직렬화/anti직렬화 방법을 구현합니다.

양식 직렬화자세한 설명(그림 및 텍스트 튜토리얼)

위 내용은 PHP 직렬화 및 역직렬화에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.