문제

직렬화하고 base64_encode하여 데이터베이스에 던지는 대규모 2D 배열이 있습니다.다른 페이지에서 어레이를 꺼내고 base64_decode 직렬화된 배열을 에코로 출력하면 확실히 유효해 보입니다.

그러나 내가하려고하면 unserialize(base64_decode($serializedArray)) Firefox가 거의 충돌할 정도로 동일한 오류가 발생합니다.

오류는 다음과 같습니다

경고: unserialize() [함수.직렬화 해제]:24행의 /var/www/dev/wc_paul/inc/analyzerTester.php에 노드가 더 이상 존재하지 않습니다.

나는 에코아웃하는 전체 직렬 배열을 포함하려고 했지만 지난 번 이 형식에서 이를 시도했을 때 Firefox가 충돌했습니다.

왜 이런 일이 일어날 수 있는지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

객체가 아닌 배열을 직렬화하고 있습니까?DOMNode?) 리소스와 마찬가지로 모든 클래스가 직렬화 해제에 만족하는 것은 아닙니다.DOM의 예(귀하의 오류가 작업 중임을 나타냄)의 경우 모든 노드에는 parentNode에 대한 참조가 있으며 노드가 직렬화 해제되는 순간 parentNode가 존재하지 않으면 다음을 수행할 수 없습니다. 해당 참조를 다시 생성하면 문제가 발생합니다.

DOM 트리를 데이터베이스에 XML로 저장하고 나중에 다시 로드하는 것이 좋습니다.

다른 팁

데이터베이스 필드가 직렬화된 배열을 수용할 만큼 충분히 큰지 확인하십시오.직렬화된 데이터는 매우 PHP에서는 공간이 비효율적이며 MySQL과 같은 많은 DB는 너무 긴 필드 값을 자동으로 자릅니다.

배열에는 어떤 유형의 요소가 있습니까?직렬화/직렬화 해제는 내장 PHP 객체에서 작동하지 않으며 일반적으로 이것이 오류의 원인입니다.

또한 귀하의 의견에 따르면 이것은 문제가 아니지만 데이터베이스 공간을 절약하려면 데이터를 base64로 인코딩하지 말고 그냥 이스케이프하십시오.즉.mysql의 경우 mysql_real_escape_string을 사용하십시오.

리소스를 직렬화하지 않도록 하세요. 리소스는 직렬화될 수 없습니다.

리소스@php.net

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top