Я столкнулся со странной проблемой при настройке сервера 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». (Обратите внимание, что «:» является следующим символом ascii в последовательности после «9», если $number
равен 0-9, все работает. Кажется, что числа больше 10 используют эквиваленты ascii - поэтому 11 - это «;», 12 - это « <'и т. д.) </p>
Самым странным является то, что первые четыре строки в приведенном выше примере кода, похоже, влияют на результаты. Логично, что эти заявления не должны иметь никакого влияния, но если я их закомментирую или удалю, проблема исчезнет.
Есть идеи? Кто-нибудь еще может повторить это?
Примечания:
- Я пробовал php 5.3.1 и 5.3.2, оба ведут себя одинаково
- Вышеуказанный скрипт отлично работает, даже в браузере, для обновления 5-6 страниц после перезапуска Apache. Тогда ошибка, как описано, возвращает