ScotlandPHP

Поддержка Windows

Support for long and UTF-8 path

Если веб-приложение работает с 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
9
martin dot keckeis1 at gmail dot com
10 months 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