php语句结束标记,PHP结束标记“?>”

本问题已经有最佳答案,请猛点这里访问。

我有一个PHP结束标记的有趣现象。 我有一个由Ajax调用执行的php文件。 在php文件中包含了一个具有各种功能的php库文件。 当这个库被包含时,php响应包括一堆空行。 当我从库中删除结束标记时,这种情况就停止了。

任何人都可以向我解释这里发生了什么?

你可能在?>标签后面有一些空行,然后空行被解释为空行。 删除php结束标记时,这些行被视为php代码,并且空的php行不会写入输出缓冲区。

库PHP文件在?>之后有一堆换行符。 它们作为输出直接发送到输出缓冲区,因为它们不会被解释为中的PHP代码。 这是"已发送标头"错误的最常见原因,以及许多框架省略?>的原因。

php.net/manual/en/language.basic-syntax.phptags.php"如果文件是纯PHP代码,最好省略文件末尾的PHP结束标记。这可以防止意外的空格或新行 在PHP结束标记之后添加"

我认为这个回答在另一个类似的问题上是一个完美的答案。

这是有据可查的。从PHP手册:

The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.

省略结束标记有助于防止意外的空格或换行符添加到文件末尾。

这是PHP的核心功能:与其他语言不同,您需要使用特殊标记(通常为)标记PHP代码,因为其他所有内容都被视为文字输出:

This is not PHP

echo 'This is PHP' . PHP_EOL;

?>

This is not PHP either

D:\tmp>php test.php

This is not PHP

This is PHP

This is not PHP either

尽管手册提到了HTML,但PHP并不真正了解/关心其标签之外的内容类型。

如果您忘记在进一步填充后关闭PHP块,通常会出现语法错误:

This is not PHP

echo 'This is PHP' . PHP_EOL;

This is not PHP either

D:\tmp>php test.php

PHP Parse error:  syntax error, unexpected 'is' (T_STRING) in D:\tmp\borrame.php on line 6

空行是一种特殊情况,因为它们在几乎所有语言(PHP,HTML,CSS,JavaScript ......)中都是有效且几乎不可见的,因此它们经常被忽视。

删除?>标记后,文字空白行已从脚本输出中消失,因为它们已成为PHP代码的一部分(因此,它们已开始被忽略)。

当然,PHP会忽略空行,但不一定是你生成的任何内容,正如我所说,它不需要是HTML:它可以是图片,PDF文档,Excel电子表格。当它是文件的最后一部分时,不关闭最后一个PHP块,可以很容易地避免伪造白线。

今天你不应该在你的PHP中使用echo。 指向MVC,模板系统,框架等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值