PHP注意:在1534行/var/www/zephyr/library/XenForo/Application.php中遇到的格式不正确的数值在第1534行
[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
你在乘以一个整数字符串在$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;
谢谢大家,但是我解决了这个问题,apache2试图加载php5和php7同时导致它损坏,卸载php5修复了这个问题 –
@ItsDezi你没有得到这个注意因为Apache。有机会,你现在只是禁用通知。或者你的php7.ini没有使用memory_limit的简写符号 – Gordon
你$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论坛上关于此错误报告:
谢谢大家,但是我解决了这个问题,apache2试图加载php5和php7的同时导致它损坏,卸载php5解决了这个问题 –
我的猜测是$ curLimit = @ini_get( 'memory_limit的');被设置为类似1M的东西。所以请检查$ curLimit是什么。 – Gordon
'var_dump($ curLimit)' –