php 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를 해야 하는 상황에 대해 예를 들어주실 수 있나요?
PHP 배열, 개체 또는 기타 복잡한 데이터 구조는 실행 중인 PHP 스크립트 외부에서 전송, 저장 또는 사용할 수 없습니다.스크립트를 한 번 실행하는 것 이상으로 복잡한 데이터 구조를 유지하려면 스크립트를 직렬화해야 합니다.즉, 구조를 데이터베이스, 텍스트 파일, 소켓 등 PHP 이외의 것으로 처리할 수 있는 "하위 공통분모"에 넣는 것입니다.표준 PHP 함수serialize
이러한 것을 표현하기 위한 형식일 뿐이며, 데이터 구조를 PHP 고유의 문자열 표현으로 직렬화하고 이를 사용하여 PHP 개체로 되돌릴 수 있습니다.unserialize
JSON XML을 사용합니다.
예를 들어 다음과 같은 일반적인 문제를 생각해 보겠습니다.
Javascript에 PHP 어레이를 전달하려면 어떻게 해야 하나요?
PHP 자바스크립트 수 요."foo"
자바스크립트 '은'을 .1
자바스크립트인 ''을할 수 있습니다.true
★★★★★★★★★★★★★★★★★」false
자바스크립트자바스크립트?
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>
복잡한 데이터 구조를 문자열로 전달해야 하는 경우가 많습니다.임의의 데이터 구조를 문자열로 나타내는 시리얼화는 이 방법을 해결합니다.
PHP serialize() 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);
이게 도움이 됐으면 좋겠다
<?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";}
here
a=size of array
i=count of array number
s=size of array values
를 사용하여 을 데이터베이스에 할 수 .
사용하는 데이터를 취득해, UN시리얼라이즈 할 수 있습니다.
php 값을 저장할 수 있도록 하려면 문자열 값으로 설정해야 합니다.이것이 serialize()의 동작입니다.unserialize()는 그 반대입니다.
대부분의 저장 매체는 문자열 유형을 저장할 수 있습니다.어레이나 오브젝트와 같은 PHP 데이터 구조를 직접 저장할 수 없으며, 데이터 저장 매체와 PHP를 결합할 수 있으므로 저장해서는 안 됩니다.
신,는serialize()
그럼 이러한 구조 중 하나를 문자열로 저장할 수 있습니다.에서 -트 it it it it it it it it it it it it it로 직렬화 할 수 .unserialize()
.
에면면면면면면면면 json_encode()
★★★★★★★★★★★★★★★★★」json_decode()
(JSON), (JSON), (JSON), (JSON), (JSON)
제발! 제발! 제발!데이터를 직렬화하여 데이터베이스에 배치하지 마십시오.시리얼라이즈는 이러한 방법으로 사용할 수 있지만, 관계형 데이터베이스의 요점과 데이터베이스 엔진에 고유한 데이터 유형이 없습니다.이렇게 하면 데이터베이스의 데이터를 이식할 수 없고 읽기 어려우며 쿼리를 복잡하게 만들 수 있습니다.예를 들어, Java를 사용하는 것이 타당하다고 생각되는 앱의 일부에 Java를 사용하고 싶다고 하는 등, 애플리케이션을 다른 언어로 휴대할 수 있도록 해 주세요.삽입할 데이터를 조작하기 위해 서드파티제의 중간 도구를 사용하지 않고 항상 데이터베이스 내의 데이터를 쿼리하고 수정할 수 있어야 합니다.
코드, 이식성 문제가 있는 코드, 데이터를 다른 RDMS 시스템이나 새로운 스키마 등으로 마이그레이션하기가 매우 어렵습니다.또한 직렬화된 필드 중 하나를 기준으로 데이터베이스를 검색하는 것이 번거롭다는 단점도 있습니다.
그렇다고 해서 serialize()가 쓸모없는 것은 아닙니다.그게 아니라...예를 들어 데이터 집약적인 작업 결과를 포함하는 캐시 파일이 적합합니다.다른 많은 것들이 있다...시리얼라이즈를 남용하지 마세요.다음 번에는 유지보수나 이행의 악몽을 꾼다.
serialize() 및 unserialize()의 좋은 예는 다음과 같습니다.
$posts = base64_encode(serialize($_POST));
header("Location: $_SERVER[REQUEST_URI]?x=$posts");
페이지에서 직렬화 해제
if($_GET['x']) {
// unpack serialize and encoded URL
$_POST = unserialize(base64_decode($_GET['x']));
}
http://php.net/manual/en/function.serialize.php 에서 :
값의 저장 가능한 표현을 생성합니다.이는 유형 및 구조를 잃지 않고 PHP 값을 저장하거나 전달할 때 유용합니다.
기본적으로는 php 배열 또는 객체를 사용하여 문자열로 변환합니다(적합하다고 생각되는 대로 전송 또는 저장할 수 있습니다).
직렬화 취소는 문자열을 개체로 다시 변환하는 데 사용됩니다.
기본적으로 어레이나 오브젝트를 시리얼화할 때 유효한 문자열 형식으로 변환하기만 하면 php 스크립트 외부에서 쉽게 저장할 수 있습니다.
- serialize를 사용하여 오브젝트의 상태를 데이터베이스에 저장합니다(사용자 클래스를 예로 들 수 있습니다).다음으로 데이터의 시리얼화를 해제하고 이전 상태를 오브젝트에 로드합니다(메서드는 serializer가 아닙니다).
- 사용자 개인화
오브젝트에는 magic __sleep 및 __wakeup 메서드를 사용해야 합니다.__sleep은 serialize에 의해 호출됩니다.sleep 메서드는 유지할 개체에서 값 배열을 반환합니다.
__serialize 해제에 의해 백업이 호출됩니다.웨이크업 메서드는 직렬화되지 않은 값을 가져와 개체에서 초기화해야 합니다.
php와 js 사이에 데이터를 전달하려면 json_encode를 사용하여 php 어레이를 유효한 json 형식으로 변환합니다.또는 JSON.parese()를 사용하여 출력 데이터(문자열)를 유효한 json 개체로 변환합니다.이를 통해 로컬 스토리지를 활용할 수 있습니다.(데이터 액세스 제한)
그래, 할 수 있어.시스템을 추적할 필요가 있다고 가정합니다.즉, 시스템에 여러 명의 admin과 subadmin이 있습니다.이러한 정보는 모두 삽입, 갱신 또는 편집할 수 있습니다.나중에 누가 이 변경을 하는지 알아야 합니다.이 문제를 해결하려면 일련 번호가 필요합니다.
**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)
이것이 당신에게 도움이 되길 바랍니다.
preg_match_all('/\".*?\"/i', $string, $matches);
foreach ($matches[0] as $i => $match) $matches[$i] = trim($match, '"');
언급URL : https://stackoverflow.com/questions/8641889/how-to-use-php-serialize-and-unserialize
'programing' 카테고리의 다른 글
pip 패키지는 어디에 설치됩니까? (0) | 2022.12.27 |
---|---|
MariaDB Java Reactive 클라이언트 (0) | 2022.12.27 |
Java: NIO와 NIO.2의 차이점은 무엇입니까? (0) | 2022.12.27 |
GROUP BY를 사용하여 각 그룹의 최신 레코드를 얻는 방법은 무엇입니까? (0) | 2022.12.27 |
WSO2 API Manager 1.10은 Maria를 지원합니까?DB (0) | 2022.12.27 |