2014-12-25 2 views
0

문자열 아래의 문자열을 직렬화하고 있지만 아무 것도 반환하지 않습니다.PHP에서 unserialize 어떤 값도 반환하지 않습니다.

A : 57 {S : 10 "THEME_NAME"; S : 5 : "녹색", S : 16 "PUBLIC_ADS_LIMIT"; S : 1 : "5", S : 17 "PUBLIC_EDIT_LIMIT" ; S : 1 : "5"; S : 8 : "SITENAME"; S : 10 : "Abcdubai";의 : 5 : ";}

+1

는'후 줄 바꿈을 것 같다 문제 해결. 원래 코드에서도 그렇습니까? 또한 결과를 반향하는 경우 실패시 unserialize()가 false를 반환한다는 사실을 놓칠 수 있습니다. 예를 들어'var_dump() '를 사용하여 함수가 정확히 무엇을 반환하는지 확인하십시오. – Boaz

+0

'unserialize() : 144 바이트 오프셋 132에서 오류가 발생했습니다. 잊지 말고 모든 오류를 표시하면 알 수 있습니다. – codinginsane

+1

[unserialize() \ [function.unserialize \] 가능한 중복 : 오류시 오프셋] http://stackoverflow.com/questions/10152904/unserialize-function-unserialize-error-at-offset) – Neo

답변

1

당신이 일렬 화를 푸는하고 데이터가 잘못

a:57{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:10:"Abcdubai";s:5:";} 

당신은 당신이 알림이 표시됩니다 E_ALL 오류보고로 문자열을 비 일렬 화하려고하면

$data = 'a:57{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:10:"Abcdubai";s:5:";}'; 

var_dump($data); 

당신은

  • a:57 배열의 길이

    Notice: unserialize(): Error 
    

    때문에 얻을 것이다 데이터에서 당신은 명확하게 57 아니다 있습니다. 문자열 s:10:"Abcdubai" 문자열 Abcdubai의 길이

  • s: 점은 8 그래서 당신은 s:5는 의미 같은 이유로 끝에 마지막으로 당신이 s:5:";s:8:"Abcdubai"

  • 에 그 변경해야합니다의 길이가 10 아닙니다 길이가 5 자와 문자열은 그것을 당신이이 방법의 t을 시도 할 수 있습니다

    <?php 
    // this the valid data 
    $data = 'a:4:{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:8:"Abcdubai";}'; 
    
    $data = unserialize($data); 
    
    // accessing the valid serialized data 
    echo $data['THEME_NAME']; 
    echo $data['PUBLIC_ADS_LIMIT']; 
    echo $data['PUBLIC_EDIT_LIMIT']; 
    echo $data['SITENAME']; 
    

한 따옴표와 비어 57 : :`오 포맷이

function fixUnserializeFormatting($data){ 
     // fix string length (will fix s:) 
     $data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $data); 
     // remove empty matches with one double qoute 
     $data = preg_replace('/s\:+[0-9]+\:";/i', '', $data); 

     // trying to get the right array length 
     $strings = substr_count($data,';')/2;   
     // fixing array length 
     $data = preg_replace('/^a:+[0-9]+:/i', "a:{$strings}:", $data); 

     // finally returning the formatted data 
     return $data;  
    } 

사용

$data = 'a:57:{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:10:"Abcdubai";s:5:";}'; 

    $data = fixUnserializeFormatting($data); 

    var_dump(unserialize($data));  
관련 문제