2017-06-27 27 views
0

我最近将一个正在工作的codeigniter项目移到了一台新的服务器上,同一个控制器的许多页面都失败了。我跟踪下来到这条线PHP整数值打破整个控制器“服务器设置”?

$card['id'] = 00086;休息整个文件

$card['id'] = "00086";是好的,但铸造为字符串

$card['id'] = (int)"00086";的作品,但为什么呢?

$card['id'] = 86;有效,但为什么?

有没有我不熟悉的服务器设置? 我甚至不在线中的功能,它打破了它后面的一切。

+0

你到底想要做什么? –

+0

我真的只想知道为什么我可以对服务器进行更改,而不会遇到与另一个文件相同的问题......它在以前的服务器上工作就好了 – Dug

回答

3

这是因为PHP试图将数字解释为由于前导零引起的八进制数。例如

$a = 08; 
var_dump($a); 

将引发错误,因为08不是有效的八进制数,而是因为它是一个有效的八进制数

$a = 07; 
var_dump($a); 

不会引发错误。

$a = 0071; 
var_dump($a); 

会产生int(57)因为在八进制,转化为57十进制71

documentation link说:

要使用八进制符号,前面加上0(零)的数目。要使用 十六进制符号在数字前面加上0x。要使用二进制 符号在数字前面加上0b。

顺便说一句,(int)"0086"作品因为PHP第一次遇到0086为一个字符串,然后蒙上成整数所以数变为在这种情况下86$var = 86适用于直接的原因,因为它是有效的十进制数。