Setlocale устанавливает десятичную точку вместо запятой - PullRequest
2 голосов
/ 08 декабря 2011

Это происходит только на сервере IIS 7.5 в Windows 7 (в linux десятичная точка установлена ​​очень хорошо).

$locale = setlocale(LC_ALL, 'pl_PL.utf8', 'pl_PL', 'pl', 'polish');
echo $locale;
echo strftime('%B');
print_r(localeconv());

Вывод:

Polish_Poland.1250
grudzień
Array ( 
[decimal_point] => .
...
)

Как видно:

  1. Локаль настроена нормально
  2. Печатается месяц очень хорошо
  3. Десятичная точка равна ., тогда как должна быть ,

PHP - это VC9 TS, работающий как модуль FastCGI, попытался запустить из CLI с тем же результатом ...

Есть идеи, почему и если есть исправление?

1 Ответ

1 голос
/ 13 декабря 2011

Если это происходит на уровне CLI, то я бы сказал, что это ошибка в PHP, о которой следует сообщить (http://bugs.php.net).

Однако, прежде чем сделать это, вы должны предпринять следующие шаги, чтобы они не кричали на вас:

  1. Убедитесь, что вы используете последнюю стабильную версию PHP (5.3.8) !! Они попросят вас указать версию, а если вы используете более старую версию, они, вероятно, просто отметят ее как поддельную и скажут вам загрузить текущую версию.

  2. Повторите тест в Linux, используя тот же скрипт. Результат скажет вам, является ли ошибка специфичной для сборки Windows или нет. Если это так, то это может быть, а может и не быть проблемой самой Windows (в этом случае Пьер может быть немного раздражен), но я бы сказал, что это все же стоит опубликовать, так что есть запись об этой проблеме на трекере ошибок.

  3. Это не обязательно, но конвертирование вашего скрипта в файл PHPT с последующей публикацией, которая может получить более быстрый ответ.

  4. Если возможно, попробуйте повторить эту ошибку в отдельном окне Windows, чтобы исключить проблему с конфигурацией вашей ОС. Конечно, вы можете пропустить этот шаг, если ошибка возникает и в Linux.

Как только ошибка будет опубликована, пожалуйста, оставьте ссылку на нее здесь. Вы, вероятно, получите ответы с просьбой предоставить дополнительную информацию, поэтому следите за ней и будьте готовы сделать это без особых задержек.

Этот процесс подтвердит, является ли это ошибкой в ​​PHP. Если это ошибка, то ваш отчет приведет к исправлению в следующем выпуске. Если будет опубликовано исправление, я могу исправить это в исходном коде и отправить вам пользовательскую сборку для использования до выпуска следующей версии.

Да, и на несвязанной ноте вы должны не использовать сборку PHP ZTS на IIS / FastCGI! Я не думаю, что это связано с вашей проблемой, но вы можете столкнуться с другими проблемами (снижение производительности, случайные сбои и т. Д.), Если продолжите использовать эту сборку. Вам нужна сборка NTS (не ориентированная на многопотоковое исполнение).

Вот основное правило для запуска PHP в Windows:

Apache: поточно-ориентированный (ZTS)

IIS ISAPI: потокобезопасный (ZTS)

IIS FastCGI: не поддерживает потоки (NTS)

...