2024 年 PHP 日本大会

Windows 支持

长路径和 UTF-8 路径的支持

如果 Web 应用程序符合 UTF-8,则无需进一步操作。对于依赖于非 UTF-8 编码路径进行 I/O 的应用程序,必须设置显式的 INI 指令。编码 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 和 OEM 代码页为 437 的系统上,使用 UTF-8 时,代码页 1251、1252、1253 和其他一些代码页的输出可以正确显示。在同一系统上,代码页如 20932 中的字符可能无法正确显示。这指的是代码页、字体兼容性和使用的特定控制台程序的特定系统规则。PHP 会根据 php.ini 中的编码规则自动设置控制台代码页。在某些情况下,使用 cmd.exe 之外的替代控制台可能会带来更好的体验。

但是请注意,请求开始后运行时代码页切换可能会对 CLI 带来意想不到的副作用。推荐的方法是使用 php.ini,当在不支持 Unicode 的控制台模拟器中使用 PHP CLI 时,可能需要避免更改控制台代码页。实现此目的的最佳方法是将默认编码或内部编码设置为与 ANSI 代码页对应。另一种方法是将 INI 指令 output_encoding 和 input_encoding 设置为所需的代码页,但在这种情况下,内部代码页和 I/O 代码页之间的差异很可能导致乱码。在极少数情况下,如果 PHP 发生正常崩溃,则可能无法恢复原始控制台代码页。在这种情况下,可以使用 chcp 命令手动恢复它。

对于 DBCS 系统,特别需要注意 - 使用 ini_set() 进行运行时代码页切换可能会导致显示问题。与非 DBCS 系统的区别在于,扩展字符需要两个控制台单元才能显示。在某些情况下,只有字符映射到字体的字形集才会发生,而不会实际更改字体。这是 DBCS 系统的特性,防止显示问题的最简单方法是避免使用 ini_set() 来更改代码页。

由于流中支持 UTF-8,PHP 脚本不再局限于 ASCII 或 ANSI 文件名。CLI 中开箱即用地支持此功能。对于其他 SAPI,相应的服务器文档非常有用。

长路径支持是透明的。超过 260 字节的路径会自动以 \\?\ 为前缀。最大路径长度限制为 2048 字节。请注意,路径段限制(基本名长度)仍然存在。

为了获得最佳的可移植性,强烈建议使用 UTF-8 处理文件名、I/O 和其他相关主题。此外,对于控制台应用程序,最好使用 TrueType 字体,并且不建议使用 ini_set() 来更改代码页。

readline

通过 » WinEditLine 库 支持 readline 扩展。因此,也支持交互式 CLI shell(php.exe -a)。

PHP_FCGI_CHILDREN

现在已考虑 PHP_FCGI_CHILDREN。如果定义了此环境变量,则第一个 php-cgi.exe 进程将执行指定数量的子进程。这些子进程将共享相同的 TCP 套接字。

ftok()

添加了对 ftok() 的支持

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top