/
windows-support.xml
161 lines (158 loc) · 8.9 KB
/
windows-support.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 3cd337b4dc91c827399961b9b45524ae4f2b50c9 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="migration71.windows-support" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Поддержка Windows</title>
<sect2 xml:id="migration71.windows-support.long-and-utf8-path">
<title>Поддержка длинных и UTF-8 путей</title>
<para>
Если веб-приложение работает с UTF-8, то никаких дополнительных действий не требуется.
Для приложений осуществляющих ввод/вывод по путям, заданных в кодировке
отличной от UTF-8, необходимо явно задать значения в INI-файле. Проверка кодировок
осуществляется в следующем порядке:
</para>
<itemizedlist>
<listitem>
<simpara>
internal_encoding
</simpara>
</listitem>
<listitem>
<simpara>
default_charset
</simpara>
</listitem>
<listitem>
<simpara>
zend.multibyte
</simpara>
</listitem>
</itemizedlist>
<para>
Было введено несколько функций для обработки кодовых страниц:
</para>
<itemizedlist>
<listitem>
<simpara>
sapi_windows_cp_set() для установки кодировки по умолчанию
</simpara>
</listitem>
<listitem>
<simpara>
sapi_windows_cp_get() для получения текущей кодировки
</simpara>
</listitem>
<listitem>
<simpara>
sapi_windows_cp_is_utf8()
</simpara>
</listitem>
<listitem>
<simpara>
sapi_windows_cp_conv() для конвертации между кодировками с использованием сигнатур
аналогичным iconv()
</simpara>
</listitem>
</itemizedlist>
<para>
Эти функции потокобезопасны.
</para>
<para>
Кодовая страница, используемая для вывода в консоли настраивается в зависимости от кодировки,
используемой в PHP. В зависимости от конкретной системной OEM-кодировки, видимый
результат может быть корректным или нет. Например, в стандартной консоли cmd.exe в
системах с кодировкой 437 OEM-вывод в кодировках 1251, 1252, 1253 и некоторых других
может отображаться правильно при использовании UTF-8. В тех же самых системах
символы в кодировке типа 20932 будут показаны некорректно. Это относится к конкретным
системным правилам для кодовой страницы, совместимости шрифтов и конкретной
используемой консоли. PHP автоматически устанавливает кодовую страницу консоли в
соответствии с правилами кодирования из php.ini. В некоторых случаях использование
консоли отличной от стандартной cmd.exe может улучшить ситуацию.
</para>
<para>
Не забывайте, что переключение кодовой страницы во время исполнения после
запуска скрипта может привести к неожиданным побочным эффектам в CLI.
Лучший вариант - использовать php.ini. При использовании PHP CLI в эмуляторе
консоли, который не поддерживает Unicode, это может потребоваться во избежание
изменения кодировки консоли. Лучший вариант - установить кодировку по умолчанию
или внутреннюю кодировку как ANSI. Также можно установить директивы
output_encoding и input_encoding в требуемые значения, но следует помнить, что
при отличии внутренней кодировки и кодировки вводы/вывода вы, скорее всего,
получите кракозябры. В редких случаях при падении PHP, кодировка консоли может не
восстанавливаться в изначальное значение. В таком случае восстановите её самостоятельно
с помощью команды chcp.
</para>
<para>
Особое замечание для систем DBCS - переключение кодировки во время исполнения
с помощью <function>ini_set</function> может вызвать проблемы с отображением.
Разница с системами без DBCS заключается в том, что расширенные символы требуют двух
ячеек консоли для отображения. В некоторых случаях может произойти только
отображение символов в глифы текущего шрифта, без его смены. Это в характере
систем DBCS. Самый простой способ избежать проблем с отображением - отказаться
от использования <function>ini_set</function> для изменения кодовой страницы.
</para>
<para>
В результате поддержки UTF-8 в потоках, скрипты PHP больше не ограничены
кодировками ASCII и ANSI для имён файлов. Такая поддержка доступна из коробки
CLI. Для других SAPI следует изучить соответствующую документацию.
</para>
<para>
Длинные пути поддерживаются прозрачно. Пути длиннее 260 байт автоматически
дополняются префиксом <literal>\\?\</literal>. Максимальная длина пути ограничена
2048 байтами. Имейте в виду, что ограничения на длину сегмента пути (длину базового
имени) по-прежнему сохраняются.
</para>
<para>
Для лучшей переносимости настоятельно рекомендуется обрабатывать имена файлов,
ввод/вывод и прочие, связанные с UTF-8 сущности. Кроме того, для
консольных приложений рекомендуется использовать шрифты TrueType и не
рекомендуется менять кодировку с помощью ini_set().
</para>
<para>
</para>
<para>
</para>
</sect2>
<sect2 xml:id="migration71.windows-support.readline">
<title>readline</title>
<para>
Модуль <link linkend="book.readline">readline</link> поддерживается через библиотеку
<link xlink:href="&url.readline.windows;">WinEditLine</link>. Таким образом интерфейс оболочки
<acronym>CLI</acronym> также поддерживается (<literal>php.exe -a</literal>).
</para>
</sect2>
<sect2 xml:id="migration71.windows-support.php-fcgi-children">
<title>PHP_FCGI_CHILDREN</title>
<para>
Теперь принимается во внимание <varname>PHP_FCGI_CHILDREN</varname>. Если задана
эта переменная окружения, то первый процесс <filename>php-cgi.exe</filename> породит
указанное количество потомков, которые будут разделять те же TCP-сокеты.
</para>
</sect2>
<sect2 xml:id="migration71.windows-support.ftok">
<title>ftok()</title>
<para>
Добавлена поддержка для <function>ftok</function>
</para>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->