Підтримка 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()