5

这个问题纯粹是出于学术目的,因为该设置在 PHP 5.4 中已被删除,并且 2000 年早已过去,但有人知道y2k-compliance配置设置做了什么吗?

PHP 文档并没有告诉你太多:

y2k_compliance(布尔值)

强制执行 2000 年的合规性(将导致不合规的浏览器出现问题)

所以,那里没有太多有用的信息!

从谷歌搜索中,大部分出现上述重复或对设置删除的引用,我发现的唯一附加信息是这个页面,它指出:

一些用户可能使用过时的、不合规的浏览器。如果出于某种奇怪的原因,您确定您网站的许多用户属于该组,则禁用 y2k_compliance 参数;否则,它应该被启用。

y2k_compliance = On

指定 PHP 脚本是否应与 2000 年兼容。使 PHP 脚本与 Y2K 兼容(通过将此指令设置为 On)将导致与不兼容 Y2K 的浏览器出现问题。

更多信息,但仍然是一个非常高级的描述。

我一直无法找到有关此设置试图解决什么问题或如何解决它的任何技术信息。

y2k-compliance那么,如果标志被禁用,PHP 有什么不同呢?

4

2 回答 2

4

好吧,这不是过去的爆炸吗!我至少有10年没见过这个了。

该行为很简单,实际上很容易追溯到源代码。它只真正影响 PHP 引擎的一部分。

它的症结很简单。RFC 850 (1983) 规定所有日期格式都应具有日期的最后两位数字。RFC 822 改变了这一点。然而,这并不意味着所有浏览器都会神奇地更新甚至知道如何处理这个问题。

出于这个原因,添加了这个标志,因此人们可以根据他们运行旧(当时)浏览器的用户数量随意设置他们想要旧格式还是新格式。

于 2019-08-10T21:03:10.780 回答
3

不确定这是否有帮助,但我从 PHP3 中找到了一些旧文档,其中更详细地描述了 Y2K 合规性。正如预期的那样,它与处理 2 位数年份格式有关。

来源:archive.org :php.net/y2k.php3

2000 年合规性和 PHP

与 Perl 一样,PHP 与您的铅笔一样符合 2000 年的标准。您需要担心的是您使用 PHP 编写的应用程序,而不是 PHP 本身。

cookie 中的日期存在问题。Netscape 最初指定 cookie 的到期日期应为 2 位数年份格式。由于所有 y2k 的炒作,他们决定在 Netscape 4 及更高版本中改变这种行为。这并不意味着 2 位数年份不符合 y2k 标准。例如,两位数的年份“13”在 Netscape 中将被理解为 2013 年。所有浏览器都理解这种 2 位格式,因此这是 PHP 中的默认值。一些 y2k 狂热分子仍然坚持无论如何都不要使用 2 位数的年份,对于这些人来说,PHP 在 php3.ini 文件中提供了一个 y2k_compliance 配置设置。

于 2019-08-10T21:01:39.473 回答