【问题标题】:php integer value breaks whole controller "server setting"?php整数值破坏了整个控制器“服务器设置”?
【发布时间】:2017-11-30 15:31:12
【问题描述】:

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

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

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

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

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

是否有我不熟悉的服务器设置? 我什至不在该行所在的函数中,它破坏了它之后的所有内容。

【问题讨论】:

  • 你到底想做什么?
  • 我真的只是想知道为什么,这样我就可以对服务器进行更改,而不会在另一个文件中遇到同样的问题......它在以前的服务器上工作得很好

标签: php .htaccess codeigniter php-ini


【解决方案1】:

这是因为由于前导零,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 工作的原因很简单,因为它是一个有效的十进制数。

【讨论】:

    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多