Поддержка 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()

add a note add a note

User Contributed Notes 1 note

up
8
martin dot keckeis1 at gmail dot com
8 years ago
The biggest windows change is missing here.

You can now finally use UTF-8 and long paths under windows

See the notes here
https://github.com/php/php-src/blob/e33ec61f9c1baa73bfe1b03b8c48a824ab2a867e/UPGRADING#L418
To Top