Поддержка Windows
Поддержка длинных и UTF-8 путей
Если веб-приложение работает с UTF-8, то никаких дополнительных действий не требуется. Для приложений осуществляющих ввод/вывод по путям, заданных в кодировке отличной от UTF-8, необходимо явно задать значения в INI-файле. Проверка кодировок осуществляется в следующем порядке:
- internal_encoding
- default_charset
- zend.multibyte
Было введено несколько функций для обработки кодовых страниц:
- sapi_windows_cp_set() для установки кодировки по умолчанию
- sapi_windows_cp_get() для получения текущей кодировки
- sapi_windows_cp_is_utf8()
- sapi_windows_cp_conv() для конвертации между кодировками с использованием сигнатур аналогичным iconv()
Эти функции потокобезопасны.
Кодовая страница, используемая для вывода в консоли настраивается в зависимости от кодировки, используемой в PHP. В зависимости от конкретной системной OEM-кодировки, видимый результат может быть корректным или нет. Например, в стандартной консоли cmd.exe в системах с кодировкой 437 OEM-вывод в кодировках 1251, 1252, 1253 и некоторых других может отображаться правильно при использовании UTF-8. В тех же самых системах символы в кодировке типа 20932 будут показаны некорректно. Это относится к конкретным системным правилам для кодовой страницы, совместимости шрифтов и конкретной используемой консоли. PHP автоматически устанавливает кодовую страницу консоли в соответствии с правилами кодирования из php.ini. В некоторых случаях использование консоли отличной от стандартной cmd.exe может улучшить ситуацию.
Не забывайте, что переключение кодовой страницы во время исполнения после запуска скрипта может привести к неожиданным побочным эффектам в CLI. Лучший вариант - использовать php.ini. При использовании PHP CLI в эмуляторе консоли, который не поддерживает Unicode, это можт потребоваться во избежание изменения кодировки консоли. Лучший вариант - установить кодировку по умолчанию или внутреннюю кодировку как ANSI. Также можно установить директивы output_encoding и input_encoding в требуемые значения, но следует помнить, что при отличии внутренней кодировки и кодировки вводы/вывода вы, скорее всего, получите кракозябры. В редких случаях при падении PHP, кодировка консоли может не восстанавливаться в изначальное значение. В таком случае восстановите ее самостоятельно с помощью команды chcp.
Особое замечание для систем DBCS - переключение кодировки во время исполнения с помощью ini_set() может вызвать проблемы с отображением. Разница с системами без DBCS заключается в том, что расширенные символы требуют двух ячеек консоли для отображения. В некоторых случаях может произойти только отображение символов в глифы текущего шрифта, без его смены. Это в характере систем DBCS. Самый простой способ избежать проблем с отображением - отказаться от использования ini_set() для изменения кодовой страницы.
В результате поддержки UTF-8 в потоках, скрипты PHP больше не ограничены кодировками ASCII и ANSI для имен файлов. Такая поддержка доступна из коробки CLI. Для других SAPI следует изучить соответствующую документацию.
Длинные пути поддерживаются прозрачно. Пути длиннее 260 байт автоматически
дополняются префиксом \\?\
. Максимальная длина пути ограничена
2048 байтами. Имейте в виду, что ограничения на длину сегмента пути (длину базового
имени) по-прежнему сохраняются.
Для лучшей переносимости настоятельно рекомендутся обрабатывать имена файлов, ввод/вывод и прочие, связанные с UTF-8 сущности. Кроме того, для консольных приложений рекомендуется использовать шрифты TrueType и не рекомендуется менять кодировку с помощью ini_set().
readline
Расширение readline поддерживается через библиотеку
» WinEditLine. Таким образом интерфейс оболочки
CLI также поддерживается (php.exe -a
).
PHP_FCGI_CHILDREN
Теперь принимается во внимание PHP_FCGI_CHILDREN. Если задана эта переменная окружения, то первый процесс php-cgi.exe породит указанное количество потомков, которые будут разделять те же TCP-сокеты.
ftok()
Добавлена поддержка для ftok()