我在 WAMP 服务器设置(PHP 版本 5.3.0,Apache 2.2.11)上遇到了一个奇怪的问题。使用 sprintf 输出数字时,我偶尔会在输出字符串中得到错误字符。
示例:(没有修剪任何东西,这是脚本中唯一的代码)
$dt1 = new DateTime('now');
$dt2 = new DateTime('now - 10 min');
$interval = $dt1->diff($dt2);
$number = 10.0;
$string = sprintf("%.1f", $number);
echo "number: $number, string: $string\n";
如果我在命令提示符下使用 PHP CLI 运行它,我会得到预期的输出:
数字:10,字符串:10.0
但是,如果我使用 Apache 提供服务,在浏览器中我会得到
数字:10,字符串::.0
应该在“10”的地方加一个冒号。(请注意,':' 是 '9' 之后的下一个 ascii 字符,如果$number
是 0-9,一切正常。大于 10 的数字似乎使用 ascii 等效项 - 所以 11 是 ';',12 是 '<', ETC。)
最奇怪的是,上面代码示例中的前四行似乎影响了结果。从逻辑上讲,这些陈述应该没有影响,但如果我将它们注释掉或删除它们,问题就会消失。
有任何想法吗?还有其他人可以复制吗?
笔记:
- 我尝试过 php 5.3.1 和 5.3.2,两者的行为方式相同
- 上面的脚本工作正常,即使在浏览器中,在重新启动 Apache 后刷新 5-6 次页面。然后,如上所述,错误返回