-
Notifications
You must be signed in to change notification settings - Fork 102
/
windows-support.xml
137 lines (130 loc) · 5.59 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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 3cd337b4dc91c827399961b9b45524ae4f2b50c9 Maintainer: avenger Status: ready -->
<!-- CREDITS: mowangjuanzi -->
<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>
如果 Web 应用程序符合 UTF-8 编码,则不需要采取进一步的操作。对于依赖非 UTF-8 编码路径进行
I/O 的应用程序,必须设置明确的 INI 指令。编码 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 和 OEM 代码页为 437 的系统上,使用 UTF-8 时可以正确显示代码页 1251、1252、1253
和其它一些代码页中的输出。在同一系统上,代码页中的字符(例如 20932)可能无法正确显示。这是指代码页、字体兼容性和所使用的特定控制台程序的特定系统规则。PHP
根据 php.ini 中的编码规则自动设置控制台代码页。在某些情况下,使用替代控制台而不是直接使用 cmd.exe 可能会带来更好的体验。
</para>
<para>
不过请注意,请求开始后切换运行时代码页可能会给 CLI 带来意想不到的副作用。更好的方法是 php.ini,当在不支持
Unicode 的控制台模拟器中使用 PHP CLI 时,可能需要这样做,以避免更改控制台代码页。实现此目的的最佳方式是将默认编码或内部编码设置为相应的
ANSI 代码页。另一种方法是将 INI 指令 output_encoding 和 input_encoding 设置为所需的代码页,但在这种情况下,内部代码页和 I/O
代码页之间的差异可能会导致乱码。在极少数情况下,如果 PHP 碰巧优雅崩溃,原始的控制台代码页可能无法恢复。在这种情况下,可以使用
chcp 命令,手动恢复。
</para>
<para>
对于 DBCS 系统需要特别注意——在运行时使用 <function>ini_set</function> 切换代码页可能会导致显示问题。与非 DBCS
系统的区别在于,扩展字符需要两个控制台单元格才能显示。在某些情况下,只有将字符映射到字体的字形集才能发生,而不会实际更改字体。这是
DBCS 系统的本质,预防显示问题的最简单方法是避免使用 <function>ini_set</function> 进行代码页更改。
</para>
<para>
由于 stream 支持 UTF-8,PHP 脚本不再局限于 ASCII 或 ANSI 文件名。CLI 上开箱即用的支持此功能。对于其它 SAPI,相应服务器的文档很有用。
</para>
<para>
长路径支持是公开的。超过 260 字节的路径会自动添加前缀 <literal>\\?\</literal>。最大路径长度限制为 2048 字节。路径片断限制(文件名长度)仍然存在。
</para>
<para>
为了获得最佳的可移植性,强烈推荐使用 UTF-8 处理文件名、I/O 和其它相关主题。此外,对于控制台应用程序,最好使用 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 socket。
</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
-->