【问题标题】:What did PHP's y2k_compliance php.ini setting do?PHP 的 y2k_compliance php.ini 设置有什么作用?
【发布时间】:2019-08-10 20:45:10
【问题描述】:

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

PHP documentation 并没有告诉你太多:

y2k_compliance(布尔值)

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

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

从谷歌搜索中,我发现的唯一附加信息是this page,它主要是重复上述内容或提及设置的删除,其中指出:

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

y2k_compliance = On

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

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

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

那么,如果 y2k-compliance 标志被禁用,PHP 的表现有何不同?

【问题讨论】:

  • 这个问题得到了两个很好的答案,我真的不知道如何决定接受哪一个,我不能同时接受!我该如何决定?选择之前发布的那一个?两个都不选?写我自己的答案,综合它们两者(似乎有点毫无意义 - 它不会添加任何东西)?扔硬币?
  • 只需选择您希望奖励积分的任何答案。无论哪种方式,未来的用户都会知道该问题是可以解决的,并且其他答案仍可用于获得更多见解。除非他们提供一些额外的价值或洞察力,否则通常不会看到人们接受其他答案并将它们整合到一个新的答案中。但是,如果您的问题得到解决,至少将某些内容标记为答案是个好主意。
  • 我选择了塞巴斯蒂安的答案,因为它有更多的选票,但实际上它们之间几乎没有什么可以选择的。
  • 我理解您的立场,但由于两个答案相辅相成,因此变得更加困难。但是,我确实相信,如果有人再次提出这个问题,他们最终会同时阅读这两个问题。
  • ...现在他们的票数相同! :-) 如果我可以分分的话,我会的,但是你去吧。

标签: php language-history


【解决方案1】:

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

这种行为很简单,实际上很容易追溯到source code。它只真正影响 PHP 引擎的一部分。

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

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

【讨论】:

  • 有趣的是,这是一个基于预期用户群的简单开/关开关,而不是通过浏览器嗅探处理的东西。你会认为这将是一种更强大的方法。我想你可以实现自己的浏览器嗅探,并相应地设置标志。
  • @HappyDog 这是互联网的早期阶段。为了让您了解这是如何发生的,“编纂”或至少启动 user-agent 标头的 RFC 是 1996 年的 tools.ietf.org/html/rfc1945#page-46,由 1999 年的 tools.ietf.org/html/rfc2616#page-145(HTTP/1.1 RFC)进一步编纂. 该参数于 2001 年引入 PHP,因此对于 支持 RFC 概述的内容的导航器来说,这是一个前沿和创可贴修复。
【解决方案2】:

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

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

2000 年合规性和 PHP

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

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

【讨论】:

  • 考虑到它是由技术人员编写的,这是一个奇怪的未开化观点。将一个非常真实的技术问题视为“狂热分子”的观点,并在同一句话中完全说明为什么 2 位数的年份是一个问题(“在 Netscape 中被理解为 2013 年”-但是其他浏览器呢?)。我认为这表明了 PHP 团队在历史上的天真。很高兴他们在 PHP4 出现时已经长大了一点,默认情况下启用了这个标志! :-)
  • 这仍然比 Netscape 多一种浏览器。 :-) 无论哪种方式,它仍然表明对标准化点和what it means to be y2k compliant缺乏了解。
  • 是的,尽管如此……Netscape 在 90 年代中后期的市场份额约为 80% 以上,而他们使用此设置解决的问题更多是要处理那个客户端浏览器(当之无愧)而不是服务器端问题。对于 PHP 早期的 20 年历史文档,我认为对它们进行轻松处理是安全的。
猜你喜欢
  • 2012-11-30
  • 2016-04-30
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多