当前位置: 首页 > 面试题库 >

为什么有人会省略关闭标签?

东方辉
2023-03-14
问题内容

我一直在阅读?>,在文件末尾使用PHP close标签是一种不好的做法。标头问题在以下情况下似乎无关紧要(这是迄今为止唯一的好参数):

现代版本的PHP在php.ini中设置了output_buffering标志。如果启用了输出缓冲,则可以在输出HTML之后设置HTTP标头和cookie,因为返回的代码不会立即发送到浏览器。

每本优秀实践书籍和Wiki均以该“规则”开头,但没有人提供充分的理由。 是否还有另一个很好的理由跳过结尾的PHP标记?


问题答案:

提前发送标头可能会产生深远的影响。以下是我眼中突然想到的其中一些:

  1. 尽管当前的PHP版本可能会缓冲输出,但是将要用于部署代码的实际 生产服务器 比任何开发或测试机器都重要得多。而且他们并不总是倾向于立即跟随最新的PHP趋势。

  2. 您可能会为莫名其妙的 功能丧失 感到头痛。假设您正在实现某种付款网关,并在付款处理器成功确认后将用户重定向到特定的URL。如果发生某种PHP错误,甚至是警告或行末多余,付款可能仍未处理,并且用户似乎仍未开票。这也是不必要的重定向是邪恶的原因之一,如果要使用重定向,则必须谨慎使用。

  3. 即使在最新版本中,您也可能在Internet Explorer中收到“页面加载已取消”类型的错误。这是因为 AJAX 响应/ json包含不应该包含的内容,因为某些PHP文件中的行尾多余,就像我几天前遇到的那样。

  4. 如果您的应用程序中有一些 文件下载 ,它们也可能因此中断。而且即使多年后,您也可能不会注意到它,因为下载的特定习惯取决于服务器,浏览器,文件的类型和内容(以及其他一些我不想让您感到厌烦的因素) 。

  5. 最后,许多PHP框架,包括Symfony,[Zend和Laravel(在编码指南中没有提及,但遵循了诉讼)和PSR-2标准项目2.2)要求省略结束标记。PHP手册本身1,2,WordPress的,Drupal的和许多其他PHP软件我想,提醒这样做。如果您只是习惯遵循标准(并为您的代码设置PHP-CS-Fixer),则可以忽略此问题。否则,您将始终需要牢记该问题。

奖励:与这两个字符相关的一些陷阱(实际上是一个陷阱):

  1. 即使是某些知名的库,在之后也可能包含多余的行尾?>。例如Smarty,即使2. 和3. 分支的最新版本也有此功能。因此,一如既往,请 注意第三方代码 。额外的好处:用于删除不必要的PHP结尾的正则表达式:(\s*\?>\s*)$在包含PHP代码的所有文件中替换为空文本。


 类似资料:
  • 问题内容: 我有一个带有关系的实体,我想通过一个查询来检索它,因此使用。有时,Hibernate不尊重它,而是发出N + 1 秒。随着 有时 我的意思是,因为我不知道是什么触发它,我有案件对不同的查询,这可能发生,或者不一样的类。 这是带有我使用的注释的简化实体: 用 我希望单个查询能够同时获取其及其内容,例如 相反,我得到了第一选择所有N S和那么N 献给所有S(考虑没有缓存)。 我发现了许多类

  • 问题内容: 出于好奇,为什么< img >标签没有在 HTML中 关闭? 我还注意到,< img >标记在 XHTML中 已显式关闭。 问题答案: 从历史上看,HTML一直基于SGML,它允许在某些情况下省略标签。 由于元素不能有任何子节点,因此将其定义为EMPTY,并且禁止使用end标签(因为它将毫无用处)。 XHTML是用XML表示的HTML,并且XML不支持可选或禁止的标签(尽管它允许使用自

  • 问题内容: 在某些脚本中,我看到他们省略了为脚本编写结束标记的过程。为什么会这样,我也应该这样做吗? (我确定他们没有忘记它。) 问题答案: 好吧,省略结束标记只是避免在文件末尾出现空格和其他字符的一种解决方案。例如,在稍后尝试修改标头信息时,意外在结束标记后面添加的任何字符都会触发错误。 参照许多编码准则,删除结束标记是一种“好的做法”。

  • 我有一个作为字符串接收的HTML文档,然后使用jSoup解析它。此HTML文档(字符串形式)包含

  • 我正在尝试运行一个使用SimpleTransformersRoberta模型进行分类的服务。推断脚本/函数本身在测试时按预期工作。当我将其与FastAPI一起使用时,它会关闭服务器。 错误: 推理脚本: 更新:试用了flask,服务正在运行,但在flask顶部添加uvicorn时,它陷入了重启循环。

  • 我正在处理xml,我需要每条记录发送一条消息,当我收到最后一条记录时,我关闭了kafka生产者,这里的问题是kafka生产者的发送方法是异步的,因此,有时当我关闭生产者时,它会拖曳我在某个地方读到过,我可以让制片人敞开心扉。我的问题是:这意味着什么,或者是否有更好的解决方案。 -编辑- 想象以下场景: 我们阅读标签并创建kafka生产者 对于每个元素,我们读取其属性,生成一个json对象并使用se