2017-08-12 45 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解决了这个问题 –

相关问题