php serialize () 및 unserialize ()를 사용하는 방법
PHPphp serialize () 및 unserialize ()를 사용하는 방법
내 문제는 아주 기본적인 것이다.
정확히 무슨 serialize () 및 unserialize () php 의미하는 내 요구를 충족하는 모든 예제를 찾지 못했습니까? 그들은 예제를 제공합니다 - 배열을 직렬화하고 설명되지 않는 형식으로 출력을 보여줍니다. 그들의 전문 용어를 사용하는 기본 개념을 이해하는 것은 정말로 어렵습니다.
편집하다:
<?php
$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);
?>
산출:
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
나는 두 번째 산출물을 이해할 수 없다. 게다가, 그것을 사용하기 전에 PHP 배열을 serialize 할 필요가 상황의 예를 누구든지 줄 수 있습니까?
해결법
-
==============================
1.PHP 배열이나 객체 또는 다른 복잡한 데이터 구조는 실행중인 PHP 스크립트 외부로 전송되거나 저장되거나 달리 사용될 수 없습니다. 스크립트의 단일 실행 이상으로 복잡한 데이터 구조를 유지하려면 직렬화해야합니다. 이것은 데이터베이스, 텍스트 파일, 소켓과 같은 PHP 이외의 것들이 처리 할 수있는 "하위 공통 분모"에 구조를 추가하는 것을 의미합니다. 표준 PHP 함수 serialize는 이러한 것을 표현하는 형식 일 뿐이며 데이터 구조를 PHP 고유의 문자열 표현으로 직렬화하고 unserialize를 사용하여 PHP 객체로 되돌릴 수 있습니다. 하지만 JSON 또는 XML과 같은 다른 많은 형식이 있습니다.
PHP 배열이나 객체 또는 다른 복잡한 데이터 구조는 실행중인 PHP 스크립트 외부로 전송되거나 저장되거나 달리 사용될 수 없습니다. 스크립트의 단일 실행 이상으로 복잡한 데이터 구조를 유지하려면 직렬화해야합니다. 이것은 데이터베이스, 텍스트 파일, 소켓과 같은 PHP 이외의 것들이 처리 할 수있는 "하위 공통 분모"에 구조를 추가하는 것을 의미합니다. 표준 PHP 함수 serialize는 이러한 것을 표현하는 형식 일 뿐이며 데이터 구조를 PHP 고유의 문자열 표현으로 직렬화하고 unserialize를 사용하여 PHP 객체로 되돌릴 수 있습니다. 하지만 JSON 또는 XML과 같은 다른 많은 형식이 있습니다.
예를 들어 다음과 같은 일반적인 문제를 생각해보십시오.
PHP와 Javascript는 문자열을 통해서만 통신 할 수 있습니다. "foo"문자열을 Javascript에 매우 쉽게 전달할 수 있습니다. Javascript에 숫자 1을 매우 쉽게 전달할 수 있습니다. 부울 값 true 및 false를 Javascript에 쉽게 전달할 수 있습니다. 하지만이 배열을 Javascript에 어떻게 전달합니까?
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
대답은 직렬화입니다. PHP / Javascript의 경우 JSON이 실제로 더 나은 직렬화 형식입니다.
{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }
Javascript는이를 실제 Javascript 배열로 쉽게 되돌릴 수 있습니다.
이것은 동일한 데이터 구조의 표현과 마찬가지로 유효합니다.
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
하지만 PHP 만 사용하기 때문에 다른 곳에서는이 형식을 거의 지원하지 않습니다. 이것은 매우 일반적이며 잘 지원됩니다.
<array> <element key='1'>elem 1</element> <element key='2'>elem 2</element> <element key='3'>elem 3</element> </array>
복잡한 데이터 구조를 문자열로 전달해야하는 경우가 많이 있습니다. 임의의 데이터 구조를 문자열로 나타내는 직렬화는이를 수행하는 방법을 해결합니다.
-
==============================
2.PHP는 직렬화 () unserialize () 사용
PHP는 직렬화 () unserialize () 사용
http://freeonlinetools24.com/serialize
echo '<pre>'; // say you have an array something like this $multidimentional_array= array( array( array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 4, 7) ), array( array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 5, 7) ), array( array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 8, 7) ) ); // serialize $serialized_array=serialize($multidimentional_array); print_r($serialized_array);
어떤 결과가 나옵니까?
a:3:{i:0;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:4;i:2;i:7;}}i:1;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:5;i:2;i:7;}}i:2;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:8;i:2;i:7;}}}
다시 원래 배열을 원한다면 PHP unserialize () 함수를 사용하십시오.
$original_array=unserialize($serialized_array); var_export($original_array);
이게 도움이되기를 바랍니다.
-
==============================
3.PHP 값을 저장 가능하게 만들고 싶으면 serialize ()가하는 문자열 값으로 변환해야합니다. 그리고 unserialize ()는 그 반대의 작업을합니다.
PHP 값을 저장 가능하게 만들고 싶으면 serialize ()가하는 문자열 값으로 변환해야합니다. 그리고 unserialize ()는 그 반대의 작업을합니다.
-
==============================
4.대부분의 저장 매체는 문자열 유형을 저장할 수 있습니다. 그들은 배열이나 객체와 같은 PHP 데이터 구조를 직접 저장할 수 없으며 데이터 저장 매체와 PHP를 결합하지 않아야합니다.
대부분의 저장 매체는 문자열 유형을 저장할 수 있습니다. 그들은 배열이나 객체와 같은 PHP 데이터 구조를 직접 저장할 수 없으며 데이터 저장 매체와 PHP를 결합하지 않아야합니다.
대신 serialize ()를 사용하면 이러한 구조체 중 하나를 문자열로 저장할 수 있습니다. unserialize ()로 캐릭터 라인 표현으로부터 직렬화 복원 할 수 있습니다.
json_encode () 및 json_decode () (그리고 일반적으로 JSON)에 익숙하다면 개념이 비슷합니다.
-
==============================
5.http://php.net/manual/en/function.serialize.php에서 :
http://php.net/manual/en/function.serialize.php에서 :
본질적으로, 그것은 php 배열이나 객체를 취하고이를 문자열로 변환합니다 (여러분이 보았던 것처럼 전송하거나 저장할 수 있습니다).
Unserialize는 문자열을 다시 객체로 변환하는 데 사용됩니다.
-
==============================
6.
<?php $a= array("1","2","3"); print_r($a); $b=serialize($a); echo $b; $c=unserialize($b); print_r($c);
이 프로그램을 실행하여 출력을 에코합니다.
a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}
이리 a = 배열의 크기 i = 배열 번호의 수 s = 배열 값의 크기
serialize를 사용하여 데이터 배열을 데이터베이스에 저장하고 검색 할 수 있고 사용할 데이터를 UN 직렬화 할 수 있습니다.
-
==============================
7.부디! 부디! 부디! 데이터를 직렬화하여 데이터베이스에 저장하지 마십시오. 직렬화는 그런 식으로 사용할 수 있지만 관계형 데이터베이스와 데이터베이스 엔진에 고유 한 데이터 유형의 점이 누락되었습니다. 이렇게하면 데이터베이스의 데이터를 이동성이없고 읽기가 어려워 질 수 있으며 쿼리가 복잡해질 수 있습니다. 애플리케이션을 다른 언어로 이식하기를 원한다면, Java를 사용하는 것이 의미있는 앱의 일부분에 Java를 사용하려는 것처럼, 직렬화가 엉덩이의 고통이 될 것입니다. 삽입 할 데이터를 조작하려면 타사 중간 도구를 사용하지 않고 데이터베이스의 데이터를 항상 쿼리하고 수정할 수 있어야합니다.
부디! 부디! 부디! 데이터를 직렬화하여 데이터베이스에 저장하지 마십시오. 직렬화는 그런 식으로 사용할 수 있지만 관계형 데이터베이스와 데이터베이스 엔진에 고유 한 데이터 유형의 점이 누락되었습니다. 이렇게하면 데이터베이스의 데이터를 이동성이없고 읽기가 어려워 질 수 있으며 쿼리가 복잡해질 수 있습니다. 애플리케이션을 다른 언어로 이식하기를 원한다면, Java를 사용하는 것이 의미있는 앱의 일부분에 Java를 사용하려는 것처럼, 직렬화가 엉덩이의 고통이 될 것입니다. 삽입 할 데이터를 조작하려면 타사 중간 도구를 사용하지 않고 데이터베이스의 데이터를 항상 쿼리하고 수정할 수 있어야합니다.
코드, 이식성 문제가있는 코드 및 다른 RDMS 시스템, 새로운 스키마 등으로 마이그레이션하기가 더 어려운 데이터를 유지 관리하는 것은 정말로 어렵습니다. 또한 다음 중 하나를 기반으로 데이터베이스를 검색하는 것이 지저분 해지는 단점이 있습니다. 당신이 직렬화 한 분야.
그것은 serialize ()가 쓸모 없다는 것을 말하는 것이 아닙니다. 그것은 아닙니다 ... 그것을 사용하는 좋은 장소는 예를 들어, 데이터 집중적 인 연산의 결과를 포함하는 캐시 파일 일 수 있습니다. 수 많은 사람들이 있습니다 ... 따라 오는 다음 사람이 유지 보수 또는 이주의 악몽을 겪을 것이므로 남용하지 마십시오.
$posts = base64_encode(serialize($_POST)); header("Location: $_SERVER[REQUEST_URI]?x=$posts");
페이지에서 분류 해제
if($_GET['x']) { // unpack searilized and ecoded URL $_POST = unserialize(base64_decode($_GET['x'])); }
-
==============================
8.예, 저는 할수 있습니다. 우리는 시스템 수단을 추적해야한다고 가정합니다. 시스템에 둘 이상의 관리자 및 하위 관리자가 있습니다. 이들 모두는 정보를 삽입하거나 업데이트하거나 편집 할 수 있습니다. 나중에 누가이 변경을 수행했는지 알아야합니다. 이 문제를 해결하려면 직렬화가 필요합니다.
예, 저는 할수 있습니다. 우리는 시스템 수단을 추적해야한다고 가정합니다. 시스템에 둘 이상의 관리자 및 하위 관리자가 있습니다. 이들 모두는 정보를 삽입하거나 업데이트하거나 편집 할 수 있습니다. 나중에 누가이 변경을 수행했는지 알아야합니다. 이 문제를 해결하려면 직렬화가 필요합니다.
**Explain:**Create a table named history which stores all changes. Each time there is a change insert a new row in this table. It might have this fields: history(id,target_table(name of the table), target_id (ID of the saved entry),create/edit/change data (serialized data of the saved row),date)
이게 당신을 도울 수 있기를 바랍니다.
-
==============================
9.기본적으로 배열이나 객체를 직렬화 할 때 PHP 스크립트 외부에 쉽게 저장할 수 있도록 유효한 문자열 형식으로 변환하면됩니다.
기본적으로 배열이나 객체를 직렬화 할 때 PHP 스크립트 외부에 쉽게 저장할 수 있도록 유효한 문자열 형식으로 변환하면됩니다.
객체에 대한 참고 사항에서는 마술 __sleep 및 __wakeup 메소드를 사용해야합니다. __sleep은 serialize ()에 의해 호출됩니다. 수면 메소드는 유지하려는 객체의 값 배열을 반환합니다.
__wakeup은 unserialize ()에 의해 호출됩니다. 웨이크 업 메소드는 직렬화되지 않은 값을 가져 와서 오브젝트에서 초기화합니다.
PHP와 js 사이에서 데이터를 전달하려면 json_encode를 사용하여 php 배열을 유효한 json 형식으로 변환합니다. 아니면 JSON.parese ()를 사용하여 출력 데이터 (문자열)를 유효한 json 객체로 변환합니다. 로컬 저장소를 사용하려면이 작업을 수행해야합니다. (오프라인 데이터 액세스)
from https://stackoverflow.com/questions/8641889/how-to-use-php-serialize-and-unserialize by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
사용자 시간대 가져 오기 [중복] (0) | 2018.09.12 |
---|---|
PHP에서 mod_rewrite가 활성화되었는지 확인하는 방법은 무엇입니까? (0) | 2018.09.12 |
PHP에서 URL로부터 도메인 구문 분석하기 (0) | 2018.09.12 |
move_uploaded_file은 내가 수행 한 모든 구성이 끝난 후 "스트림을 열지 못했습니다 : Permission denied"오류를 표시합니다. (0) | 2018.09.12 |
str_replace를 사용하여 첫 번째 일치에서만 작동하도록 하시겠습니까? (0) | 2018.09.12 |