2016-10-24 1 views
1

이 오류를 해결하기 위해 노력 중이지만/var/www/html/mysite /를 열 때 drupal에 대한 새로운 이유를 찾을 수 없습니다 Error at offset 2 of 16 bytes in bootstrap.inc on line 936 // bootstrap.inc 나는이936 라인의 부트 스트랩 .inc에서 16 바이트 오프셋 2의 오류

function function variable_initialize($conf = array()) { 
    // NOTE: caching the variables improves performance by 20% when serving 
    // cached pages. 
    if ($cached = cache_get('variables', 'cache_bootstrap')) { 
    $variables = $cached->data; 
    } 
    else { 
    // Cache miss. Avoid a stampede. 
    $name = 'variable_init'; 
    if (!lock_acquire($name, 1)) { 
     // Another request is building the variable cache. 
     // Wait, then re-run this function. 
     lock_wait($name); 
     return variable_initialize($conf); 
    } 
    else { 
     // Proceed with variable rebuild. 
     $variables = array_map('unserialize', db_query('SELECT name, value FROM {variable}')->fetchAllKeyed()); 
     cache_set('variables', $variables, 'cache_bootstrap'); 
     lock_release($name); 
    } 
    } 

    foreach ($conf as $name => $value) { 
    $variables[$name] = $value; 
    } 

    return $variables; 
} 

오류가 나는 이유는 무엇인가, 그것을 해결할 수없는 생각이 라인 $variables = array_map('unserialize', db_query('SELECT name, value FROM {variable}')->fetchAllKeyed()); 에 표시되고 발견 포함?

+0

안녕하세요 @ 카니카, 내 대답에 오타가 있었지만 해결했습니다! 그것이 도움이되었거나 당신이 틀린 것을 찾아내는 지 말해달라고 남겨주세요. 고맙습니다. – EricLavault

+0

@ericLavault 저는 솔루션 작업을 통해 알려 드리겠습니다. – Kanika

답변

0

이 오류는 unserialize()이 데이터의 저장된 표현에서 유효하지 않은 길이 (또는 길이 불일치)로 인해 직렬화 된 값을 PHP 값으로 다시 변환하지 못함을 의미합니다.

일부 변수가 잘못 직렬화 되었기 때문에 자세한 내용은 answer을 참조하십시오.

문제를 해결하려면 먼저 variable 테이블을 확인하고 value 데이터 형식이 blob 유형인지 확인하십시오. 데이터베이스 이식성을 위해서 객체가 직렬화되면 PHP는 null 바이트를 더하기 때문에 BLOB 필드는 직렬화 된 데이터를 저장하는 데 사용해야합니다. Null 바이트는 Postgres 텍스트 또는 varchar 필드에 저장할 수 없습니다. 정확한 유형은 기본 데이터베이스에 따라 달라집니다

  • MySQL은 : LONGBLOB
  • PostgreSQL의 : BYTEA
  • SQLite는 : BLOB

이 그럼 당신은 변수 (들) 문제의 원인을 파악해야, 이 코드를 실행하고 출력을 확인하십시오.

$var = array(); 
$broken_var = array(); 
$false = serialize(FALSE); 

$rows = db_query('SELECT name, CONVERT (value USING utf8) FROM variable')->fetchAllKeyed(); 
foreach ($rows as $name => $value) { 
    $var[$name] = @unserialize($value); 
    if ($var[$name] === FALSE && $value !== $false) { 
    $broken_var[$name] = $value; 
    } 
} 

print_r($broken_var); 

"깨진"변수가 식별되면 variable_del() 또는 variable_set()을 사용하여 변수를 삭제하거나 재설정 할 수 있습니다.

문제를 방지하려면 수동으로 변수를 설정하지 말고 항상 variable_set()을 사용해야합니다.