이 글에서는 PHP의 직렬화 및 역직렬화 관련 지식을 소개합니다. 매우 좋은 참조 값이 있으므로 아래 편집기를 사용하여 살펴보겠습니다
복잡한 데이터 유형을 문자열로 압축
serialize() 변수를 결합하면 해당 값이 인코딩됩니다. 텍스트 형식으로
unserialize()는 원래 변수를 복원합니다
예:
$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";}
배열([0] => Moe [1] => Larry [2] => Curly )
이 직렬화된 데이터가 URL에 배치되면 페이지 간에 전달됩니다 urlencode( )의 URL 메타 문자가 처리되었는지 확인하기 위해 이 데이터에 대해 호출해야 합니다.
$shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4); echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'" rel="external nofollow" >next</a>';
margic_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('/tmp/cart','w'); fputs($fp,addslashes(serialize($a))); fclose($fp); //如果magic_quotes_runtime开启 $new_cat = unserialize(stripslashes(file_get_contents('/tmp/cart'))); //如果magic_quotes_runtime关闭 $new_cat = unserialize(file_get_contents('/tmp/cart'));
Magic_quotes_runtime이 활성화되면 데이터베이스에서 읽은 직렬화된 데이터도 Stripslashes()로 처리하고 직렬화를 위해 데이터베이스에 저장해야 합니다. 데이터는 addlashes()로 처리해야 적절하게 저장할 수 있습니다.
mysql_query("insert into cart(id,data) values(1,'".addslashes(serialize($cart))."')"); $rs = mysql_query('select data from cart where id=1'); $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 중국어 홈페이지(www.php.cn)를 참고해주세요!