2017-09-18 44 views
0

我有升級後此錯誤到PHP 7.1和更新WordPress的核心:非數值遇到值誤差在PHP 7.1升級WordPress的核心之後

PHP警告:/遇到非數值WP-包括/了SimplePie /解析/ Date.php上線694

這裏

public function date_w3cdtf($date) 
{ 
    static $pcre; 
    if (!$pcre) 
    { 
     $year = '([0-9]{4})'; 
     $month = $day = $hour = $minute = $second = '([0-9]{2})'; 
     $decimal = '([0-9]*)'; 
     $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))'; 
     $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/'; 
    } 
    if (preg_match($pcre, $date, $match)) 
    { 
     /* 
     Capturing subpatterns: 
     1: Year 
     2: Month 
     3: Day 
     4: Hour 
     5: Minute 
     6: Second 
     7: Decimal fraction of a second 
     8: Zulu 
     9: Timezone ± 
     10: Timezone hours 
     11: Timezone minutes 
     */ 

     // Fill in empty matches 
     for ($i = count($match); $i <= 3; $i++) 
     { 
      $match[$i] = '1'; 
     } 

     for ($i = count($match); $i <= 7; $i++) 
     { 
      $match[$i] = '0'; 
     } 

     // Numeric timezone 
     if (isset($match[9]) && $match[9] !== '') 
     { 
      $timezone = $match[10] * 3600; 
      $timezone += $match[11] * 60; 
      if ($match[9] === '-') 
      { 
       $timezone = 0 - $timezone; 
      } 
     } 
     else 
     { 
      $timezone = 0; 
     } 

     // ((LINE 694)) Convert the number of seconds to an integer, taking decimals into account 
     $second = round($match[6] + $match[7]/pow(10, strlen($match[7]))); 

     return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; 
    } 
    else 
    { 
     return false; 
    } 
} 

錯誤是來自該行的該文件的代碼:

$second = round($match[6] + $match[7]/pow(10, strlen($match[7]))); 

任何想法如何解決這個或它是什麼? 也許我需要的,如果(is_numeric

+0

爲什麼你使用正則表達式?爲什麼不日期() – Andreas

+2

如果您的var_dump($匹配);它會更容易知道什麼是錯的 – Andreas

+0

我改變這一行以下和錯誤gones。 $ second = round((int)$ match [6] +(int)$ match [7]/pow( 10,strlen($ match [7]))); – Mostafa

回答

1

我該行更改爲以下和錯誤去補充。

$second = round((int)$match[6] + (int)$match[7]/pow(10, strlen($match[7])));