diff --git a/appendices/migration71.xml b/appendices/migration71.xml index 0a2b6139b..e87f2aded 100644 --- a/appendices/migration71.xml +++ b/appendices/migration71.xml @@ -17,10 +17,8 @@ - 这个新的小版本带来了大量的 - 新特性和 - 少量的兼容性调整 - 在生产环境切换 PHP 版本前应该进行相关测试。 + 这个新的小版本带来了大量的新特性和少量的兼容性调整在生产环境切换 PHP 版本前应该进行相关测试。 &manual.migration.seealso; diff --git a/appendices/migration71/constants.xml b/appendices/migration71/constants.xml index dc0d3479e..8a9effe4a 100644 --- a/appendices/migration71/constants.xml +++ b/appendices/migration71/constants.xml @@ -41,7 +41,7 @@ - <link linkend="book.filter">Data Filtering</link> + <link linkend="book.filter">数据过滤</link> @@ -53,7 +53,7 @@ - <link linkend="book.image">Image Processing and GD</link> + <link linkend="book.image">图像处理和 GD</link> diff --git a/appendices/migration71/incompatible.xml b/appendices/migration71/incompatible.xml index 172cb5215..81f4ffdff 100644 --- a/appendices/migration71/incompatible.xml +++ b/appendices/migration71/incompatible.xml @@ -1,6 +1,7 @@ + 不向后兼容的变更 @@ -31,19 +32,17 @@ Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), - Forbid dynamic calls to scope introspection functions + 禁止动态调用作用域内的内省(introspection)函数 - Dynamic calls for certain functions have been forbidden (in the form of - $func() or array_map('extract', ...), - etc). These functions either inspect or modify another scope, and present - with them ambiguous and unreliable behavior. The functions are as follows: + 禁止动态调用($func()array_map('extract', ...) + 的形式等)某些函数。这些函数会检查或修改另一个作用域,并呈现出不明确且不可靠的行为。函数如下: - assert - with a string as the first argument + assert——字符串作为第一个参数 @@ -78,12 +77,12 @@ Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), - mb_parse_str - with one arg + mb_parse_str——使用一个参数 - parse_str - with one arg + parse_str——使用一个参数 @@ -108,10 +107,10 @@ Warning: Cannot call func_num_args() dynamically in %s on line %d - Invalid class, interface, and trait names + 无效的 class、interface 和 trait 名称 - The following names cannot be used to name classes, interfaces, or traits: + 下列名称不能用于 class、interfaces 或 traits 名: @@ -125,42 +124,34 @@ Warning: Cannot call func_num_args() dynamically in %s on line %d - Numerical string conversions now respect scientific notation + 数字字符串转换现在遵循科学记数法 - Integer operations and conversions on numerical strings now respect - scientific notation. This also includes the (int) cast - operation, and the following functions: intval (where - the base is 10), settype, decbin, - decoct, and dechex. + 现在在数字字符串上执行整数运算和转换会考虑科学计数法。这还包括 (int) + 类型转换操作以及以下函数:intval(基数为 + 10)、settypedecbindecoctdechex - Fixes to <function>mt_rand</function> algorithm + 修复 <function>mt_rand</function> 算法 - mt_rand will now default to using the fixed version of - the Mersenne Twister algorithm. If deterministic output from - mt_rand was relied upon, then - MT_RAND_PHP can be used as optional second parameter - to mt_srand to preserve the old (incorrect) - implementation. + mt_rand 现在默认使用修复版本的梅森旋转算法。如果依赖于 mt_rand + 的确定输出,则可以使用 MT_RAND_PHP 作为 mt_srand 的可选第二个参数,以保留旧的(不正确的)实现。 - <function>rand</function> aliased to <function>mt_rand</function> and - <function>srand</function> aliased to <function>mt_srand</function> + <function>rand</function> 是 <function>mt_rand</function> 的别名以及 + <function>srand</function> 是 <function>mt_srand</function> 的别名 - rand and srand have now been made - aliases to mt_rand and mt_srand, - respectively. This means that the output for the following functions have - changed: rand, shuffle, - str_shuffle, and array_rand. + randsrand 现已成为 mt_randmt_srand + 的别名。这意味着以下函数已经更改:randshufflestr_shuffle + 和 array_rand @@ -180,9 +171,8 @@ Warning: Cannot call func_num_args() dynamically in %s on line %d - If the error_log ini setting is set to - syslog, the PHP error levels are mapped to the syslog - error levels. This brings finer differentiation in the error logs in + 如果 error_log ini 设置为 syslog,PHP 错误等级会映射到 syslog 错误级别。 + This brings finer differentiation in the error logs in contrary to the previous approach where all the errors are logged with the notice level only. @@ -198,7 +188,7 @@ Warning: Cannot call func_num_args() dynamically in %s on line %d - <function>call_user_func</function>不再支持对传址的函数的调用 + <function>call_user_func</function> 不再支持对传址的函数的调用 @@ -254,14 +244,11 @@ Warning: Cannot call func_num_args() dynamically in %s on line %d - Array ordering when elements are automatically created during by reference - assignments has changed + 在引用赋值期间自动创建元素时的数组排序已更改 - The order of the elements in an array has changed when those elements have - been automatically created by referencing them in a by reference - assignment. For example: + 当通过引用赋值自动创建这些元素时,数组中元素的顺序就会发生变化。例如: @@ -301,45 +288,39 @@ array(2) { - Sort order of equal elements + 相等元素的排序顺序 - The internal sorting algorithm has been improved, what may result in - different sort order of elements, which compare as equal, than before. + 内部排序算法已得到改进,这可能会导致元素比较相等的排序顺序与以前不同。 - Don't rely on the order of elements which compare as equal; it might change - anytime. + 不要依赖比较相等的元素的顺序;它可能随时改变。 - Error message for E_RECOVERABLE errors + E_RECOVERABLE 错误的错误消息 - The error message for E_RECOVERABLE errors has been changed from "Catchable - fatal error" to "Recoverable fatal error". + E_RECOVERABLE 错误的错误消息已从“可捕获的致命错误”更改为“可恢复的致命错误”。 - $options parameter of unserialize() + unserialize() 的 $options 参数 - The allowed_classes element of the $options parameter of - unserialize is now strictly typed, i.e. if anything - other than an array or a bool is given, - unserialize() returns &false; and issues an E_WARNING. + unserialize 的 $options 参数的 allowed_classes + 元素现在是严格类型,也就是说,如果指定了 arraybool 以外的任何内容,则 + unserialize() 返回 &false; 并发出 E_WARNING - DateTime constructor incorporates microseconds + DateTime 构造方法包含微秒 - DateTime and DateTimeImmutable - now properly incorporate microseconds when constructed from the current time, - either explicitly or with a relative string (e.g. "first day of next - month"). This means that naive comparisons of two newly created - instances will now more likely return &false; instead of &true;: + DateTimeDateTimeImmutable + 现在构造当前时间时正确地包含微秒,无论是明确指定的还是使用相对字符串(例如 "first day of next + month")。这意味着两个新创建的实例的原生比较现在更有可能返回 &false; 而不是 &true;: - Fatal errors to <classname>Error</classname> exceptions conversions + 核心错误转换为 <classname>Error</classname> 异常 - In the Date extension, invalid serialization data for - DateTime or DatePeriod classes, - or timezone initialization failure from serialized data, will now throw an - Error exception from the - __wakeup or __set_state - methods, instead of resulting in a fatal error. + 在 Date 扩展中,DateTimeDatePeriod + 类的无效序列化数据或者序列化数据的时区初始化失败,现在将从 __wakeup + 或 __set_state 方法抛出 Error 异常,而不是导致致命错误。 - In the DBA extension, data modification functions (such as - dba_insert) will now throw an - Error exception instead of triggering a catchable - fatal error if the key does not contain exactly two elements. + 在 DBA 扩展中,如果键没有完全包含两个元素,数据修改函数(例如 dba_insert)现在将抛出 + Error 异常,而不是触发可捕获的致命错误。 - In the DOM extension, invalid schema or RelaxNG validation contexts will now - throw an Error exception instead of resulting in a - fatal error. Similarly, attempting to register a node class that does not - extend the appropriate base class, or attempting to read an invalid property - or write to a readonly property, will also now throw an - Error exception. + 在 DOM 扩展中,无效的模式或 RelaxNG 验证上下文现在将引发 Error + 异常,而不是导致致命错误。同样,尝试注册不继承适宜基类的节点类、尝试读取无效属性或写入只读属性,现在也将引发 + Error 异常。 - In the IMAP extension, email addresses longer than 16385 bytes will throw an - Error exception instead of resulting in a fatal error. + 在 IMAP 扩展中,长度超过 16385 字节的电子邮件地址将引发 Error 异常,而不是导致致命错误。 - In the Intl extension, failing to call the parent constructor in a class - extending Collator before invoking the parent methods - will now throw an Error instead of resulting in a - recoverable fatal error. Also, cloning a - Transliterator object will now throw an - Error exception on failure to clone the internal - transliterator instead of resulting in a fatal error. + 在 Intl 扩展中,在调用父级方法之前,在继承 Collator 的类中调用父级构造方法失败,现在将抛出 + Error 而不是可恢复的致命错误。此外克隆 Transliterator + 对象时,如果无法克隆内部 transliterator,将抛出 Error 异常,而不会导致致命错误。 - In the LDAP extension, providing an unknown modification type to - ldap_batch_modify will now throw an - Error exception instead of resulting in a fatal error. + 在 LDAP 扩展中,向 ldap_batch_modify 提供未知的修改类型现在将引发 Error 异常,而不是导致致命错误。 - In the mbstring extension, the mb_ereg and - mb_eregi functions will now throw a - ParseError exception if an invalid PHP expression is - provided and the 'e' option is used. + 在 mbstring 扩展中,如果提供了无效的 PHP 表达式并且使用了“e”选项,mb_ereg 和 + mb_eregi 函数现在将引发 ParseError 异常。 - In the Mcrypt extension, the mcrypt_encrypt and - mcrypt_decrypt will now throw an - Error exception instead of resulting in a fatal error - if mcrypt cannot be initialized. + 在 Mcrypt 扩展中,如果 mcrypt 无法初始化,mcrypt_encryptmcrypt_decrypt + 现在将抛出 Error 异常,而不是导致致命错误。 - In the mysqli extension, attempting to read an invalid property or write to - a readonly property will now throw an Error exception - instead of resulting in a fatal error. + 在 mysqli 扩展中,尝试读取无效属性或写入只读属性现在将引发 Error 异常,而不是导致致命错误。 - In the Reflection extension, failing to retrieve a reflection object or - retrieve an object property will now throw an Error - exception instead of resulting in a fatal error. + 在反射扩展中,检索 reflection 对象或检索对象属性失败现在将引发 Error 异常,而不是导致致命错误。 - In the Session extension, custom session handlers that do not return strings - for session IDs will now throw an Error exception - instead of resulting in a fatal error when a function is called that must - generate a session ID. + 在 Session 扩展中,当调用必须生成会话 ID 的函数时,自定义会话处理程序不返回字符串格式的会话 + ID 现在将引发 Error 异常,而不是导致致命错误。 - In the SimpleXML extension, creating an unnamed or duplicate attribute will - now throw an Error exception instead of resulting in - a fatal error. + 在 SimpleXML 扩展中,创建未命名或重复的属性现在将引发 Error 异常,而不是导致致命错误。 - In the SPL extension, attempting to clone an - SplDirectory object will now throw an - Error exception instead of resulting in a fatal - error. Similarly, calling ArrayIterator::append when - iterating over an object will also now throw an Error - exception. + 在 SPL 扩展中,尝试克隆 SplDirectory 对象现在将引发 Error + 异常,而不是导致致命错误。同理,在迭代对象时调用 ArrayIterator::append 现在也会引发 Error 异常。 - In the standard extension, the assert function, when - provided with a string argument as its first parameter, will now throw a - ParseError exception instead of resulting in a - catchable fatal error if the PHP code is invalid. Similarly, calling - forward_static_call outside of a class scope will now - throw an Error exception. + 在标准扩展中,将字符串作为其第一个参数时,assert 函数现在将抛出 ParseError 异常,而不是在 PHP + 代码无效时导致可捕获的致命错误。同理,在类作用域之外调用 forward_static_call 现在将引发 Error 异常。 - In the Tidy extension, creating a tidyNode manually - will now throw an Error exception instead of - resulting in a fatal error. + 在 Tidy 扩展中,手动创建 tidyNode 现在将抛出 Error 异常,而不是导致致命错误。 - In the WDDX extension, a circular reference when serializing will now throw - an Error exception instead of resulting in a fatal - error. + 在 WDDX 扩展中,序列化时的循环引用现在将引发 Error 异常,而不是导致致命错误。 - In the XML-RPC extension, a circular reference when serializing will now - throw an instance of Error exception instead of - resulting in a fatal error. + 在 XML-RPC 扩展中,序列化时的循环引用现在将抛出 Error 异常实例,而不是导致致命错误。 - In the Zip extension, the ZipArchive::addGlob - method will now throw an Error exception instead of - resulting in a fatal error if glob support is not available. + 在 Zip 扩展中,如果 glob 支持无效,ZipArchive::addGlob 方法现在将引发 Error 异常,而不是导致致命错误。 @@ -486,11 +424,8 @@ new DateTime() == new DateTime(); Lexically bound variables cannot reuse names - Variables bound to a closure via - the use construct cannot use the same name as any - &link.superglobals;, $this, or any parameter. For - example, all of these function definition will result in a fatal error: - + 通过 use 构造绑定到 closure + 的变量不能使用与任何 &link.superglobals;、$this 或任何参数相同的名称。 例如,所有这些函数定义都会导致致命错误: long2ip() 参数类型更改 - long2ip now expects an int instead of a - string. + long2ip 现在接受 int 而不是 string JSON 编/解码 - The serialize_precision ini setting now controls the - serialization precision when encoding floats. + serialize_precision ini 设置现在控制编码 float 时的序列化精度。 - Decoding an empty key now results in an empty property name, rather than - _empty_ as a property name. - + 解码空键(empty key)现在会产生空属性,而不是 _empty_ 作为属性名称。 - When supplying the JSON_UNESCAPED_UNICODE flag to - json_encode, the sequences U+2028 and U+2029 are now - escaped. + 当向 json_encode 提供 JSON_UNESCAPED_UNICODE flag 时,现在转义序列 U+2028 和 U+2029。 - Changes to <function>mb_ereg</function> and <function>mb_eregi</function> - parameter semantics + 更改 <function>mb_ereg</function> 和 <function>mb_eregi</function> 参数语义 - The third parameter to the mb_ereg and - mb_eregi functions (regs) will now be - set to an empty array if nothing was matched. Formerly, the parameter would - not have been modified. + 如果没有匹配到内容,mb_eregmb_eregi + 函数(regs)的第三个参数现在将设置为空数组。以前,不会修改该参数。 - Drop support for the sslv2 stream + 放弃对 sslv2 stream 的支持 - The sslv2 stream has now been dropped in OpenSSL. + sslv2 stream 现已在 OpenSSL 中删除。 diff --git a/appendices/migration71/new-features.xml b/appendices/migration71/new-features.xml index c0ce09a73..91adb121c 100644 --- a/appendices/migration71/new-features.xml +++ b/appendices/migration71/new-features.xml @@ -1,8 +1,7 @@ - - + 新特性 @@ -61,9 +60,9 @@ Uncaught Error: Too few arguments to function test(), 0 passed in... Void 函数 - 一个新的返回值类型void被引入。 - 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 - 对于 void 函数来说,&null; 不是一个合法的返回值。 + 一个新的返回值类型 void 被引入。返回值声明为 void + 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 + void 函数来说,&null; 不是一个合法的返回值。 @@ -102,10 +101,10 @@ int(1) - Symmetric array destructuring + 对称(Symmetric)数组解构 - 短数组语法([])现在作为list语法的一个备选项,可以用于将数组的值赋给一些变量(包括在foreach中)。 + 短数组语法([])现在作为 list 语法的一个备选项,可以用于将数组的值赋给一些变量(包括在 foreach 中)。 @@ -164,11 +163,11 @@ class ConstDemo <type>iterable</type> 伪类 - 现在引入了一个新的被称为iterable的伪类 (与callable类似)。 - 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 - 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array - 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 - array或对象返回值类型到iterable。 + 现在引入了一个新的被称为 iterable 的伪类 (与 callable 类似)。 + 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了 Traversable 接口的对象。 + 至于子类,当用作参数时,子类可以收紧父类的 iterable 类型到 array + 或一个实现了 Traversable 的对象。对于返回值,子类可以拓宽父类的 + array 或对象返回值类型到 iterable @@ -190,7 +189,7 @@ function iterator(iterable $iter) 多异常捕获处理 - 一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 + 一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。 @@ -209,10 +208,10 @@ try { - <function>list</function>现在支持键名 + <function>list</function> 现在支持键名 - 现在list和它的新的[]语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 + 现在 list 和它的新的 [] 语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似) @@ -249,8 +248,9 @@ foreach ($data as ["id" => $id, "name" => $name]) { 支持为负的字符串偏移量 - 现在所有支持偏移量的字符串操作函数 - 都支持接受负数作为偏移量,包括通过[]{}操作字符串下标。在这种情况下,一个负数的偏移量会被理解为一个从字符串结尾开始的偏移量。 + 现在所有支持偏移量的字符串操作函数都支持接受负数作为偏移量,包括通过 [] + 或 {} 操作字符串下标。在这种情况下,一个负数的偏移量会被理解为一个从字符串结尾开始的偏移量。 @@ -271,8 +271,7 @@ int(3) - Negative string and array offsets are now also supported in the simple - variable parsing syntax inside of strings. + 在字符串的简单变量解析语法中,现在也支持字符串和数组的负偏移量。 @@ -297,17 +296,17 @@ The last character of 'bar' is 'r'. ext/openssl 支持 AEAD - 通过给openssl_encryptopenssl_decrypt - 添加额外参数,现在支持了AEAD (模式 GCM and CCM)。 + 通过给 openssl_encryptopenssl_decrypt + 添加额外参数,现在支持了 AEAD(模式 GCM 和 CCM)。 - 通过 <methodname>Closure::fromCallable</methodname> 将callables转为闭包 + 通过 <methodname>Closure::fromCallable</methodname> 将 callables 转为闭包 - Closure新增了一个静态方法,用于将callable快速地 - 转为一个Closure 对象。 + Closure 新增了一个静态方法,用于将 callable 快速地 + 转为 Closure 对象。 @@ -345,7 +344,7 @@ string(10) "some value" 一个新的名为 pcntl_async_signals 的方法现在被引入, - 用于启用无需 ticks (这会带来很多额外的开销)的异步信号处理。 + 用于启用无需 ticks(这会带来很多额外的开销)的异步信号处理。 @@ -371,11 +370,10 @@ SIGHUP - HTTP/2 server push support in ext/curl + 在 ext/curl 中支持 HTTP/2 服务器推送 - 对服务器推送的支持现在已经被加入到 CURL 扩展中( - 需要版本 7.46 或更高)。这个可以通过 + 对服务器推送的支持现在已经被加入到 CURL 扩展中(需要版本 7.46 或更高)。这个可以通过 curl_multi_setopt 函数与新的常量 CURLMOPT_PUSHFUNCTION 来进行调节。常量 CURL_PUST_OKCURL_PUSH_DENY 也已经被添加进来,以便服务器推送的回调函数来表明自己会同意或拒绝处理。 diff --git a/appendices/migration71/new-functions.xml b/appendices/migration71/new-functions.xml index a638241cd..9f9816a54 100644 --- a/appendices/migration71/new-functions.xml +++ b/appendices/migration71/new-functions.xml @@ -1,13 +1,12 @@ - - + 新的函数 - PHP Core + PHP 核心 diff --git a/appendices/migration71/other-changes.xml b/appendices/migration71/other-changes.xml index 39faa0c6a..e0724bd1b 100644 --- a/appendices/migration71/other-changes.xml +++ b/appendices/migration71/other-changes.xml @@ -1,10 +1,9 @@ - - + - 其它改动 + 其它变更 无效字符串计算的通知和警告 @@ -134,8 +133,7 @@ string(1) "@" precision - If the value is set to -1, then the dtoa mode 0 is used. The default - value is still 14. + 如果该值设置为 -1,则使用 dtoa mode 0。默认值仍然是 14。 @@ -143,8 +141,7 @@ string(1) "@" serialize_precision - If the value is set to -1, then the dtoa mode 0 is used. The value -1 is - now used by default. + 如果该值设置为 -1,则使用 dtoa mode 0。现在默认值使用 -1。 @@ -152,8 +149,7 @@ string(1) "@" gd.jpeg_ignore_warning - The default of this &php.ini; setting has been changed to 1, so by - default libjpeg warnings are ignored. + 此 &php.ini; 设置的默认值已更改为 1,因此默认情况下将忽略 libjpeg 警告。 @@ -161,8 +157,7 @@ string(1) "@" opcache.enable_cli - The default of this &php.ini; setting has been changed to 1 - (enabled) in PHP 7.1.2, and back to 0 (disabled) in PHP 7.1.7. + 此 &php.ini; 设置的默认值已在 PHP 7.1.2 中更改为 1(启用),并在 PHP 7.1.7 中更改回 0(禁用)。 @@ -170,21 +165,18 @@ string(1) "@" - Session ID generation with a CSPRNG only + 仅使用 CSPRNG 生成会话 ID - Session IDs will now only be generated with a CSPRNG. + 现在只能使用 CSPRNG 生成会话 ID。 - More informative <classname>TypeError</classname> messages when &null; is allowed + 当允许 null 时提供更多信息的 <classname>TypeError</classname> 消息 - TypeError exceptions for arg_info type checks will - now provide more informative error messages. If the parameter type or return - type accepts &null; (by either having a default value of &null; or being a - nullable type), then the error message will now mention this with a message - of "must be ... or null" or "must ... or be null." + arg_info 类型检查的 TypeError 异常现在将提供更多有用的错误消息。如果参数类型或返回类型接受 + &null;(通过具有默认值 &null; 或可为 &null; 的类型),则错误消息现在将通过消息“must be ... or null”或“must ... or be null.”提及这一点。 diff --git a/appendices/migration71/windows-support.xml b/appendices/migration71/windows-support.xml index 79cc157f4..567fe64e5 100644 --- a/appendices/migration71/windows-support.xml +++ b/appendices/migration71/windows-support.xml @@ -1,17 +1,15 @@ - - + + Windows 支持 - Support for long and UTF-8 path + 支持长路径和 UTF-8 路径 - If a web application is UTF-8 conform, no further action is required. For - applications depending on paths in non UTF-8 encodings for I/O, an explicit - INI directive has to be set. The encoding INI settings check relies on the - order in the core: + 如果 Web 应用程序符合 UTF-8 编码,则不需要采取进一步的操作。对于依赖非 UTF-8 编码路径进行 + I/O 的应用程序,必须设置明确的 INI 指令。编码 INI 设置的检查依赖于核心的顺序: @@ -31,17 +29,17 @@ - Several functions for codepage handling were introduced: + 引入了几个用于处理代码页的函数: - sapi_windows_cp_set() to set the default codepage + sapi_windows_cp_set() 用于设置默认的代码页 - sapi_windows_cp_get() to retrieve the current codepage + sapi_windows_cp_get() 用于检索当前代码页 @@ -51,64 +49,39 @@ - sapi_windows_cp_conv() to convert between codepages, using iconv() compatible signature + sapi_windows_cp_conv() 使用 iconv() 兼容签名在代码页之间进行转换 - These functions are thread safe. + 这些函数是线程安全的。 - The console output codepage is adjusted depending on the encoding used in - PHP. Depending on the concrete system OEM codepage, the visible output - might or might be not correct. For example, in the default cmd.exe and on - a system with the OEM codepage 437, outputs in codepages 1251, 1252, 1253 - and some others can be shown correctly when using UTF-8. On the same system, - chars in codepage like 20932 probably won't be shown correctly. This refers - to the particular system rules for codepage, font compatibility and the - particular console program used. PHP automatically sets the console codepage - according to the encoding rules from php.ini. Using alternative consoles - instead of cmd.exe directly might bring better experience in some cases. + 控制台输出代码页根据 PHP 中使用的编码进行调整。具体取决于系统的 OEM 代码页,可见输出可能正确,也可能不正确。例如,在默认 + cmd.exe 和 OEM 代码页为 437 的系统上,使用 UTF-8 时可以正确显示代码页 1251、1252、1253 + 和其它一些代码页中的输出。在同一系统上,代码页中的字符(例如 20932)可能无法正确显示。这是指代码页、字体兼容性和所使用的特定控制台程序的特定系统规则。PHP + 根据 php.ini 中的编码规则自动设置控制台代码页。在某些情况下,使用替代控制台而不是直接使用 cmd.exe 可能会带来更好的体验。 - Nevertheless be aware, runtime codepage switch after the request start - might bring unexpected side effects on CLI. The preferable way is php.ini, - When PHP CLI is used in a console emulator, that doesn't support Unicode, - it might possibly be required, to avoid changing the console codepage. The - best way to achieve it is by setting the default or internal encoding to - correspond the ANSI codepage. Another method is to set the INI directives - output_encoding and input_encoding to the required codepage, in which case - however the difference between internal and I/O codepage is likely to cause - mojibake. In rare cases, if PHP happens to crash gracefully, the original - console codepage might be not restored. In this case, the chcp command - can be used, to restore it manually. + 不过请注意,请求开始后切换运行时代码页可能会给 CLI 带来意想不到的副作用。更好的方法是 php.ini,当在不支持 + Unicode 的控制台模拟器中使用 PHP CLI 时,可能需要这样做,以避免更改控制台代码页。实现此目的的最佳方式是将默认编码或内部编码设置为相应的 + ANSI 代码页。另一种方法是将 INI 指令 output_encoding 和 input_encoding 设置为所需的代码页,但在这种情况下,内部代码页和 I/O + 代码页之间的差异可能会导致乱码。在极少数情况下,如果 PHP 碰巧优雅崩溃,原始的控制台代码页可能无法恢复。在这种情况下,可以使用 + chcp 命令,手动恢复。 - Special awareness for the DBCS systems - the codepage switch on runtime - using ini_set is likely to cause display issues. The difference to the - non DBCS systems is, that the extended characters require two console cells - to be displayed. In certain case, only the mapping of the characters into - the glyph set of the font could happen, no actual font change. This is the - nature of DBCS systems, the most simple way to prevent display issues is - to avoid usage of ini_set for the codepage change. + 对于 DBCS 系统需要特别注意——在运行时使用 ini_set 切换代码页可能会导致显示问题。与非 DBCS + 系统的区别在于,扩展字符需要两个控制台单元格才能显示。在某些情况下,只有将字符映射到字体的字形集才能发生,而不会实际更改字体。这是 + DBCS 系统的本质,预防显示问题的最简单方法是避免使用 ini_set 进行代码页更改。 - As a result of UTF-8 support in the streams, PHP scripts are not limited - to ASCII or ANSI filenames anymore. This is supported out of the box on - CLI. For other SAPI, the documentation for the corresponding server - is useful. + 由于 stream 支持 UTF-8,PHP 脚本不再局限于 ASCII 或 ANSI 文件名。CLI 上开箱即用的支持此功能。对于其它 SAPI,相应服务器的文档很有用。 - Long paths support is transparent. Paths longer than 260 bytes get - automatically prefixed with \\?\. The max path length is limited to - 2048 bytes. Be aware, that the path segment limit (basename length) still - persists. + 长路径支持是公开的。超过 260 字节的路径会自动添加前缀 \\?\。最大路径长度限制为 2048 字节。路径片断限制(文件名长度)仍然存在。 - For the best portability, it is strongely recommended to handle filenames, - I/O and other related topics UTF-8. Additionally, for the console applications, - the usage of a TrueType font is preferable and the usage of ini_set() for - the codepage change is discouraged. + 为了获得最佳的可移植性,强烈推荐使用 UTF-8 处理文件名、I/O 和其它相关主题。此外,对于控制台应用程序,最好使用 TrueType 字体,并且不鼓励使用 ini_set() 来更改代码页。 @@ -128,16 +101,15 @@ PHP_FCGI_CHILDREN - PHP_FCGI_CHILDREN is now respected. If this environment variable is - defined, the first php-cgi.exe process will exec the specified number - of children. These will share the same TCP socket. + PHP_FCGI_CHILDREN 现在收到重视。如果定义了此环境变量,第一个 php-cgi.exe + 进程将执行指定数量的子进程。它们将共享相同的 TCP socket。 ftok() - Added support for ftok + 新增 ftok 支持