>백엔드 개발 >PHP 튜토리얼 >PHP 직렬화 길이 불일치 오류를 복구하는 방법은 무엇입니까?

PHP 직렬화 길이 불일치 오류를 복구하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-19 22:21:10977검색

How to Repair PHP Serialization Length Mismatch Errors?

PHP 직렬화 길이 불일치를 사용합니까? 복구 방법은 다음과 같습니다

문제:

직렬화된 문자열에 대해 PHP의 unserialize() 함수를 사용할 때 다음 오류가 발생합니다.

unserialize() [function.unserialize]: Error at offset

원인:

이 오류 이는 일반적으로 직렬화된 문자열의 바이트 수 길이가 잘못되어 잘못된 데이터가 발생하기 때문에 발생합니다.

해결책:

이를 수정하려면 직렬화된 배열의 요소는 다음과 같습니다.

  1. preg_replace()를 사용하여 직렬화된 배열을 수정합니다. 데이터, 길이 재계산:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
  1. 이제 직렬화 해제는 오류 없이 수정된 데이터를 처리해야 합니다.

향후 문제 예방:

1. 직렬화된 데이터 유효성 검사:

findSerializeError()와 같은 함수를 사용하여 직렬화된 데이터 세그먼트에서 오류를 식별하고 찾습니다.

2. 대체 저장 방법:

보다 안전하고 안정적인 저장을 위해 base64 인코딩 및 디코딩을 사용하여 직렬화된 데이터를 저장하고 검색하는 것을 고려해 보세요. 이렇게 하면 올바른 바이트 및 문자 처리가 보장됩니다.

예:

// Save to database
$toDatabase = base64_encode(serialize($data));

// Retrieve from database
$fromDatabase = unserialize(base64_decode($data));

추가 팁:

  • 직렬화에서 올바른 작은따옴표 및 큰따옴표 사용 data.
  • 직렬화하기 전에 addlashes()와 같은 삭제 함수를 사용하여 특수 문자를 처리하는 것을 고려하세요.
  • array_walk()를 활용하여 배열 요소에 삭제 함수를 재귀적으로 적용하세요.
  • UTF 문자, 직렬화 전에 array_map("utf8_encode", $array) 을 사용하고 직렬화 해제 전 array_map("utf8_decode", $array).

위 내용은 PHP 직렬화 길이 불일치 오류를 복구하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.