PHP에서 직렬화 함수는 종종 저장 또는 전송을 쉽게하기 위해 객체 또는 어레이를 문자열로 변환하는 데 사용됩니다. 데이터를 데이터베이스에 저장하든 네트워크를 통해 전송하든 Serialize는 중요한 도구입니다. 이 기사는 PHP의 직렬화 기능이 어떻게 작동하는지 깊이 분석하고 기본 구현 원리를 공개합니다.
직렬화 함수는 PHP 변수를 저장 가능 또는 전송 가능한 문자열로 변환합니다. 이 기능의 일반적인 사용은 다음과 같습니다.
배열 또는 객체를 문자열로 변환하여 데이터베이스에 저장하십시오.
캐시와 같은 시나리오에 대해 문자열로 다른 서비스로 데이터를 전송합니다.
예를 들어:
$data = array("name" => "John", "age" => 30);
$serializedData = serialize($data);
echo $serializedData;
출력 결과는 다음과 같습니다.
a:2:{s:4:"name";s:4:"John";s:3:"age";i:30;}
이 결과로부터 Serialize는 특정 형식을 통해 배열을 인코딩하여 나중에 원래 배열 구조로 복원 할 수 있음을 알 수 있습니다.
PHP는 특정 형식을 사용하여 데이터를 직렬화합니다. 이 형식에는 데이터 유형 식별자 및 데이터 컨텐츠가 포함됩니다. 다른 유형의 데이터에는 식별자가 다릅니다.
A : 배열
S : 문자열
I : 정수
B : Bolean
D : 플로팅 포인트
O : 객체
예를 들어, 직렬화 된 문자열 a : 2 : {s : 4 : "name"; s : 4 : "john"; s : 3 : "age"; i : 30;}는 두 요소를 포함하는 배열을 나타냅니다. 첫 번째 요소는 문자열 이름 이고 해당 문자열 값 John 이고 두 번째 요소는 문자열 연령 과 정수 값 30 입니다.
객체를 직렬화하면 직렬화가 객체의 클래스 이름, 속성 및 속성 값을 함께 직렬화합니다. 예를 들어 다음 코드를 고려하십시오.
class Person {
public $name;
public $age;
}
$person = new Person();
$person->name = "John";
$person->age = 30;
$serializedPerson = serialize($person);
echo $serializedPerson;
출력은 다음과 같습니다.
O:6:"Person":2:{s:4:"name";s:4:"John";s:3:"age";i:30;}
여기, o : 6 : "사람" 은 클래스 이름이 사람 이고, 클래스 이름 과 나이 의 두 속성이 있고, 그 가치는 각각 John 과 30 입니다.
Serialize 의 기능은 데이터를 문자열로 변환하는 것이며, 비 제외 기능은이 문자열을 원래 PHP 변수로 복원합니다. 비조화를 통해 원래 데이터 구조를 다시 구할 수 있습니다.
$originalData = unserialize($serializedData);
비 시교를 사용할 때 회수 된 데이터 유형 및 구조는 직렬화 시간과 일치해야하며, 그렇지 않으면 오류가 발생할 수 있습니다.
직렬 화 및 비 제외 기능은 데이터베이스 스토리지에서 매우 일반적입니다. 예를 들어, 캐시 시스템은 종종이 두 기능을 사용하여 복잡한 데이터 구조를 저장합니다. 직렬화를 통해 복잡한 데이터 구조 (예 : 배열 또는 객체)를 쉽게 저장 및 전송을 위해 문자열로 변환 할 수 있습니다.
PHP 세션 관리는 세션 데이터를 저장하기 위해 Serialize를 사용합니다. PHP는 세션에서 객체와 배열을 자동으로 직렬화하여 다른 요청간에 세션 데이터의 상태를 유지합니다.
직렬화 및 비 제외 화 기능은 많은 시나리오에서 매우 유용하지만 특정 안전 위험이 있습니다. 특히, 비 제외 기능은 신뢰할 수없는 소스에서 데이터를 처리 할 경우 보안 취약점을 유발할 수 있습니다. 예를 들어, 악의적으로 구성된 데이터를 제조하면 공격자가 응용 프로그램을 조작 할 수있는 코드 실행 취약성을 유발할 수 있습니다.
이러한 유형의 위험을 피하기 위해, 비소화 의 두 번째 매개 변수를 사용하여 사막화를 허용하는 클래스를 제한 할 수 있습니다. 예를 들어:
unserialize($data, ["allowed_classes" => false]); // 물체의 사막화를 비활성화합니다
또는 데이터 소스의 신뢰성을 확인함으로써 악의적 인 데이터가 비 속도 로 전달되지 않도록하십시오.
Serialize 및 Unserialize 기능은 PHP에서 매우 중요한 기능이며 데이터 저장, 세션 관리 및 기타 시나리오에서 널리 사용됩니다. 데이터를 문자열 양식으로 변환함으로써 복잡한 데이터 구조를 쉽게 저장하거나 전송할 수 있습니다. 이 두 기능의 기본 원리를 이해하면이를 더 잘 활용하고 잠재적 인 보안 문제를 피하는 데 도움이됩니다.