현재 위치: > 최신 기사 목록> 직렬화를 통해 객체 상태 저장 : 개체를 지속시킬 때주의를 기울일 문제

직렬화를 통해 객체 상태 저장 : 개체를 지속시킬 때주의를 기울일 문제

gitbox 2025-05-27

PHP에서 Serialize 함수는 객체, 배열 등과 같은 데이터 구조를 문자열 형식으로 변환하여 데이터베이스, 파일 시스템 또는 기타 지속적인 스토리지에 저장 될 수 있도록 사용됩니다. Desserialize ( unserialize ) 문자열을 원래 데이터 구조로 다시 변환합니다. 객체 상태를 저장하기 위해 Serialize를 사용하는 것은 특히 사용자 세션, 캐시 또는 다른 페이지간에 데이터를 전달 해야하는 경우 일반적인 기술입니다.

이 기사는 PHP의 직렬화 기능을 통해 객체 상태를 저장하는 방법에 대해 논의하고 객체를 지속시킬 때주의를 기울일 것들을 탐색합니다.

직렬화 기능을 사용하여 객체 상태를 저장하십시오

Serialize 함수는 PHP 변수를 매개 변수로 사용하여 저장 및 전송할 수있는 문자열로 변환합니다. 예를 들어, 간단한 객체의 경우 데이터베이스 또는 파일로 직렬화하여 저장 한 다음 사로화하여 객체의 원래 상태를 복원 할 수 있습니다.

샘플 코드

 <?php
// 간단한 클래스를 정의하십시오
class User {
    public $name;
    public $email;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }
}

// 객체를 만듭니다
$user = new User("John Doe", "[email protected]");

// 객체를 직렬화하십시오
$serializedUser = serialize($user);

// 직렬화 된 데이터를 파일 또는 데이터베이스에 저장합니다
file_put_contents("user_data.txt", $serializedUser);

// 사막화 과정을 시뮬레이션하십시오
$retrievedData = file_get_contents("user_data.txt");
$unserializedUser = unserialize($retrievedData);

// 출력 사형화 된 물체
echo "Name: " . $unserializedUser->name . "<br>";
echo "Email: " . $unserializedUser->email;
?>

코드 설명

  1. 정의 객체 : 먼저 사용자 클래스가 정의되고 사용자 이름과 이메일이 포함 된 인스턴스 사용자가 생성됩니다.

  2. Serialize Object : Serialize ($ user)를 호출하여 Object $ user를 문자열로 변환합니다.

  3. 데이터 저장 : 직렬화 된 데이터는 파일 시스템 또는 데이터베이스에 저장할 수 있습니다. 여기서는 user_data.txt 파일에 저장합니다.

  4. 사제화 : 비 시교 기능을 통해 데이터를 물체로 복원합니다.

  5. 출력 데이터 : 객체를 실조시켜 속성에 액세스 할 수 있습니다.

물체를 지속시킬 때 주목해야 할 것들

직렬화 함수는 매우 편리하지만 개체를 ​​지속시킬 때 주목해야 할 사항이 있습니다.

1. 물체의 의존성에주의를 기울이십시오

객체가 내부적으로 다른 객체에 의존하거나 객체의 클래스가 수정되면, 사막화 중에 문제가 발생할 수 있습니다. 특히 클래스의 구조가 변경되면 비 서식 화이 객체 상태를 올바르게 복원하지 않아 오류가 발생할 수 있습니다.

2. 사제의 안보

사제화 운영에는 특정 보안 위험이 있습니다. 악의적 인 사용자는 가짜 직렬화 된 문자열을 구성하여 PHP가 안전하지 않은 코드를 실행하고 원격 코드 실행 취약점을 트리거 할 수 있습니다. 이를 피하기 위해 다음과 같은 조치를 취할 수 있습니다.

  • 특히 데이터 구조가 더 간단한 경우 SerializeUnserialize 대신 JSON_ENCODEJSON_DECODE를 사용하십시오.

  • 사형화 된 데이터는 신뢰할 수있는 출처에서 나오도록 엄격하게 검증되었습니다.

3. 교차 버전 호환성

다른 버전의 PHP에서, 특히 클래스의 내부 구현이 변경 될 때 직렬화비 서식 화가 다를 수 있습니다. 따라서 애플리케이션에서이를 사용할 때 버전 업데이트의 영향을 고려하고 버전 호환성을 보장해야합니다.

4. 저장 공간

직렬화 된 문자열은 원래 데이터보다 더 많은 저장 공간을 차지할 수 있습니다. 많은 수의 객체를 저장할 때는 직렬화 데이터의 공간 오버 헤드를 고려해야합니다.

5. 데이터베이스 및 파일 스토리지

직렬화 된 데이터를 데이터베이스에 저장할 때는 필드 길이 제한에 특별한주의를 기울여야합니다. 예를 들어, 텍스트 또는 Blob 유형 필드는 대형 직렬화 된 데이터 세그먼트를 저장할 수 있지만 더 큰 객체의 경우 페이징 또는 기타 스토리지 전략을 고려해야 할 수도 있습니다.