Support Windows

Support pour les chemins long et UTF-8

Si une application web est conforme à l'UTF-8, aucune action supplémentaire n'est requise. Pour des applications qui dépendent de chemins dans un encodage différent que UTF-8 pour l'I/O, une directive INI doit être explicitement définit. La vérification des paramètres d'encodage INI se fie à l'ordre dans le cœur (core) :

  • internal_encoding
  • default_charset
  • zend.multibyte

Plusieurs fonction pour la gestion des codepage ont été introduite :

  • sapi_windows_cp_set() to set the default codepage
  • sapi_windows_cp_get() to retrieve the current codepage
  • sapi_windows_cp_is_utf8()
  • sapi_windows_cp_conv() to convert between codepages, using iconv() compatible signature

Ces fonctions sont thread safe.

La sortie de la console codepage est ajusté en fonction de l'encodage utilisé en PHP. En fonction du codepage OEM du système concret, la sortie visible pourrait ou pourrait ne pas être correct. Par exemple, avec le cmd.exe par défaut et sur un système avec le codepage OEM 437, la sortie dans codepage 1251, 1252, 1253 et d'autres peuvent être montrer correctement en utilisant UTF-8. Sur les mêmes systèmes, les charactères dans codepage tel que 20932 seront probablement pas montré correctement. Ceci fait référence aux régles système particulières pour codepage, la compabilité de la police et le choix du programme de console utilisé. PHP définit automatiquement la codepage console en accord avec les régles d'encodages depuis php.ini. Utiliser des consoles alternative à la place de cmd.exe directement pourrait apporter une meilleure expérience dans certains cas.

Toutefois soyez conscient, changer de codepage après que la requête a commencé peut causer des effets secondaires inattendue en CLI. La façon préférable est php.ini. Quand PHP CLI est utilisé dans un émulateur de console, qui ne supporte pas Unicode, il est possiblement nécessaire, d'éviter de changer la codepage de la console. La meilleure façon pour achever ceci est de définir l'encodage interne ou par défault pour correspondre à la codepage ANSI. Une autre méthode est de définir la directive INI output_encoding et input_encoding à la codepage requise, cependant dans ce cas la différence entre les codepages interne et I/O risque de causer du mojibake. Dans de rare cas, si PHP arrive à planter gracieusement, la codepage originale de la console peut ne pas être restaurée. Dans ce cas, la commande chcp peut être utilisé, pour la restaurer manuellement.

Attention particulière pour les systèmes DBCS - le changement de codepage lors de l'exécution en utilisant ini_set() risque de causer des problèmes d'affichage. À la différence des systèmes non DBCS, c'est que les charactères étendues nécessites deux consoles pour être affiché. Dans certains cas, seulement la mise en correspondance des caractères dans le jeu de glyphes de la police pourrait se produire, aucun changement de police se produit. Ceci est la nature des systèmes DBCS, la manière la plus simple de prévenir des problèmes d'affichages et d'éviter l'usage de ini_set() pour le changement de codepage.

En conséquence du support d'UTF-8 dans les flux, les scripts PHP ne sont plus limité à des noms de fichiers ASCII ou ANSI. Ceci est prêt à l'emplois en CLI. Pour d'autres SAPI, la documentation pour le serveur correspondant est utile.

Le support des chemins long est transparent. Les chemins plus long que 260 octets sont automatiquement préfixé par \\?\. La longeur maximale du chemin est limité à 2018 octets. Soyez conscient, que la limite des segments de chemin (longeur du basename) persiste.

Pour la meilleure portabilité, il est fortement recommendé de gérer les noms de fichiers, I/O et autre sujets connexe UTF-8. En outre, pour les applications console, l'usage d'une police TrueType est préférable et l'usage de ini_set() pour le le changement de codepage est déconseillé.

readline

L'extension readline est supporté à travers la » bibliothèque WinEditLine. Ainsi l'interface système interactive CLI est aussi supporté (php.exe -a).

PHP_FCGI_CHILDREN

PHP_FCGI_CHILDREN est désormais respecté. Si cette variable d'environement est définit, le premier processus php-cgi.exe exécutera le nombre spécifié d'enfant. Ceci partageront le même socket TCP.

ftok()

Ajout du support pour ftok()