php整数值打破整个控制器“服务器设置”?

时间:2017-06-27 14:16:57

标签: php .htaccess codeigniter php-ini

我最近将一个正在运行的codeigniter项目移动到一台新服务器,来自同一控制器的许多页面都失败了。我追溯到这一行

$card['id'] = 00086;打破整个文件

$card['id'] = "00086";很好,但是作为字符串

$card['id'] = (int)"00086";有效,但为什么?

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

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

1 个答案:

答案 0 :(得分:3)

这是因为由于前导零,php试图将该数字解释为八进制数。例如

$a = 08;
var_dump($a);

会抛出错误,因为08不是有效的八进制数,而是

$a = 07;
var_dump($a);

不会抛出错误,因为它是一个有效的八进制数。

$a = 0071;
var_dump($a);

将生成int(57)因为71为八进制,转换为十进制的57

documentation link说:

  

要使用八进制表示法,请在数字前面加上0(零)。使用   十六进制表示法在数字前面加上0x。要使用二进制   符号前面带有0b的数字。

顺便说一句,(int)"0086"有效,因为php首先遇到0086字符串然后将其转换为整数,因此在这种情况下数字变为86$var = 86的作用很简单,因为它是一个有效的十进制数。