2017-08-12 43 views
3

[Sat Aug 12 02:21:28.993810 2017] [php7:notice] [pid 20352 ] [客戶端:14302] PHP的通知:在/var/www/zephyr/library/XenForo/Application.php遇到上線1534PHP注意:在1534行/var/www/zephyr/library/XenForo/Application.php中遇到的格式不正確的數值在第1534行

/** 
* Gets the current memory limit. 
* 
* @return int 
*/ 
public static function getMemoryLimit() 
{ 
    if (self::$_memoryLimit === null) 
    { 
     $curLimit = @ini_get('memory_limit'); 
     if ($curLimit === false) 
     { 
      // reading failed, so we have to treat it as unlimited - unlikely to be able to change anyway 
      $curLimit = -1; 
     } 
     else 
     { 
      switch (substr($curLimit, -1)) 
      { 
       case 'g': 
       case 'G': 
        $curLimit *= 1024; //This is line 1534 
        // fall through 

       case 'm': 
       case 'M': 
        $curLimit *= 1024; 
        // fall through 

       case 'k': 
       case 'K': 
        $curLimit *= 1024; 
      } 
     } 

     self::$_memoryLimit = intval($curLimit); 
    } 

    return self::$_memoryLimit; 
} 

不太清楚如何解決這一個非以及形成數值,難倒了,我指出了行1534

+2

我的猜測是$ curLimit = @ini_get( 'memory_limit的');被設置爲類似1M的東西。所以請檢查$ curLimit是什麼。 – Gordon

+0

'var_dump($ curLimit)' –

回答

0

你在乘以一個整數字符串在$curLimit *= 1024;。因爲$curLimit等於(例如)512M。所以,你必須做的是刪除最後一個字符

$curLimitNumber = substr($curLimit, 0, -1);//Will extract the number (512 FROM 512M) 
switch (substr($curLimit, -1)) 
     { 
      case 'g': 
      case 'G': 
       $curLimitNumber *= 1024; 
+0

謝謝大家,但是我解決了這個問題,apache2試圖加載php5和php7同時導致它損壞,卸載php5修復了這個問題 –

+0

@ItsDezi你沒有得到這個注意因爲Apache。有機會,你現在只是禁用通知。或者你的php7.ini沒有使用memory_limit的簡寫符號 – Gordon

0

$curLimit來自

$curLimit = @ini_get('memory_limit'); 

報價http://php.net/manual/en/ini.core.php#ini.memory-limit

當使用一個整數,該值以字節爲單位。如本FAQ中所述,速記符號也可以使用。

而在該文檔中提到引述that FAQ

可用的選項是K(爲千字節),M(兆字節)和G(千兆字節;自PHP 5.1.0可用),並都不區分大小寫。其他任何事情都假定字節。 1M等於1兆字節或1048576字節。 1K等於1千字節或1024字節。這些簡寫符號可以用在php.ini和ini_set()函數中。

你展示的代碼正在檢查從memory_limit採取$curLimit值的最後一個字符:

switch (substr($curLimit, -1)) 

這意味着,它已經預測速記符號。在case塊中,它檢查k,g,m等(簡寫),然後將$curLimit擴展爲實際字節。

當你

$value = "1M"; 
$value *= 1024; 

的結果將是1024,但你會得到你的通知,因爲「1M」是不是一個很好形成數值,但只是一個字符串。在這種情況下,PHP所做的是type juggle,直到第一個非數字字符爲止。它將「1M」視爲整數1.因此,該代碼將起作用,但它很sl。。因此,通知。

如果你想擺脫的通知,你就必須從$curLimit剝離簡寫或投$curLimit爲int或相乘之前將它傳遞給intval

有一個在XenForo論壇上關於此錯誤報告:

+0

謝謝大家,但是我解決了這個問題,apache2試圖加載php5和php7的同時導致它損壞,卸載php5解決了這個問題 –

相關問題