집 >데이터 베이스 >MySQL 튜토리얼 >손상된 직렬화 문자열의 'unserialize(): Error at offset' 오류를 어떻게 수정할 수 있습니까?
문제:
"unserialize( ) [function.unserialize]: 직렬화 해제를 시도할 때 오프셋 오류 발생" 손상된 직렬화된 문자열. 이 오류는 문자열에 잘못된 바이트 수 길이가 포함되어 있어 데이터가 잘림을 나타냅니다.
원인:
요소 길이 계산이 잘못되어 직렬화 데이터가 잘못되었습니다.
빠르게 수정:
요소 길이 다시 계산: 직렬화된 각 요소의 실제 길이를 계산하고 해당 바이트 수 값을 업데이트합니다.
예를 들어 직렬화된 다음을 고려하세요. 문자열:
$data = 'a:10:{s:16:"submit_editorial";b:0;s:15:"submit_orig_url";s:13:"www.bbc.co.uk";s:12:"submit_title";s:14:"No title found";s:14:"submit_content";s:12:"dnfsdkfjdfdf";s:15:"submit_category";i:2;s:11:"submit_tags";s:3:"bbc";s:9:"submit_id";b:0;s:16:"submit_subscribe";i:0;s:15:"submit_comments";s:4:"open";s:5:"image";s:19:"C:fakepath100.jpg";}';
다음 코드를 사용하여 요소를 다시 계산하고 수정합니다. 길이:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
적절한 인용 확인: 직렬화된 요소에 값을 할당할 때 큰따옴표(") 대신 작은따옴표(')를 사용하세요. 후자는 예상치 못한 잘림을 유발할 수 있습니다.
추가 주의 사항:
향후 직렬화 오류 감지:
다음 함수를 사용하여 요소를 식별할 수 있습니다. 길이 차이를 확인하고 손상 원인을 찾는 데 도움을 줍니다.
function findSerializeError($data1) { // ... (code omitted for brevity) }
이 기능을 사용하면 다음을 수행할 수 있습니다. 손상된 데이터를 분석하여 문제가 되는 요소를 파악하고 그에 따라 수정합니다.
위 내용은 손상된 직렬화 문자열의 'unserialize(): Error at offset' 오류를 어떻게 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!