2016-10-24 25 views
1

我正在努力解決此錯誤,但無法找到原因,因爲我是新的drupal Error at offset 2 of 16 bytes in bootstrap.inc on line 936 當我打開/ var/www/html/mysite /包括/ bootstrap.inc文件中我發現這個在bootstrap.inc中的偏移量爲2的16字節錯誤936行

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

嗨@Kanika,我的答案有錯別字,但我修好了!請留下評論,告訴我它是否有幫助,或者如果您發現任何錯誤。謝謝 – EricLavault

+0

@ericLavault我一直在努力,一旦你的解決方案工作讓你知道 – Kanika

回答

0

此錯誤表示unserialize()無法將序列化的值轉換回PHP值,因爲存儲的數據表示中的長度(或長度不匹配)無效。

原因是某些變量被嚴重串行化,請參閱此詳細的answer以獲取更多信息。

要解決這個問題,首先檢查variable表並確保value數據類型是BLOB類型。對於數據庫可移植性,必須使用blob字段來存儲序列化的數據,因爲如果對象序列化,PHP會添加空字節。空字節不能存儲在Postgres文本或varchar字段中。確切類型取決於基礎數據庫:

  • MySQL的:LONGBLOB
  • 的PostgreSQL:BYTEA
  • SQLite的:BLOB

然後,你需要找出造成問題的變量(S)運行此代碼並檢查輸出:

$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()

相關問題