【发布时间】:2010-06-08 20:24:47
【问题描述】:
我在 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 是 '
最奇怪的是,上面代码示例中的前四行似乎影响了结果。从逻辑上讲,这些语句应该没有影响,但如果我将它们注释掉或删除它们,问题就会消失。
有什么想法吗?还有其他人可以复制吗?
注意事项:
- 我尝试过 php 5.3.1 和 5.3.2,两者的行为方式相同
- 上述脚本工作正常,即使在浏览器中,在重新启动 Apache 后刷新 5-6 次页面。然后错误,如所述,返回
【问题讨论】:
-
error_reporting开启了吗?将其设置为 E_ALL,并检查错误。 -
是的,
error_reporting和display_errors都已打开 - 没有任何显示
标签: php apache wamp wampserver