직렬화된 데이터를 처리할 때 다음과 같은 오류가 발생할 수 있습니다. "unserialize() [function.unserialize]: 오프셋에 오류가 있습니다." 이 오류는 일반적으로 잘못된 바이트 수 길이로 인해 잘못된 직렬화 데이터로 인해 발생합니다.
직렬화 중에 PHP는 strlen( ) 기능. 그러나 데이터에 큰따옴표와 같이 특별한 처리(예: 이스케이프)가 필요한 문자가 포함된 경우 바이트 수가 올바르지 않을 수 있습니다.
이 오류를 해결하려면 다음을 수행하십시오. 직렬 배열의 각 요소 길이를 수동으로 다시 계산하는 데 필요함:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
빠른 수정 외에도 잘못된 직렬화의 원인을 파악하는 것이 중요합니다. 다음 단계를 고려하세요.
$toDatabase = base64_encode(serialize($data)); // Save to database $fromDatabase = unserialize(base64_decode($data)); //Getting saved format
오류 메시지가 문제에 대한 일반적인 표시를 제공하지만 종종 도움이 됩니다. 손상된 데이터의 정확한 위치를 찾아내려면 두 개의 직렬화된 문자열을 비교하고 잘못된 문자열을 포함하여 둘 사이의 차이점을 식별하는 findSerializeError 함수를 사용하십시오. 바이트 수:
function findSerializeError($data1) { echo "<pre class="brush:php;toolbar:false">"; $data2 = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data1); // ... }
이 기능은 오류에 대한 자세한 정보를 제공하여 직렬화 문제를 식별하고 해결하는 데 도움이 됩니다.
위 내용은 PHP 직렬화된 문자열에서 'unserialize(): 오프셋 오류'를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!