在netbeans中,几乎每个PHP页面的文件末尾都以结束PHP标记?>
如果这个标签出现在文档的最后,NetBeans会显示一个提示:
不必要的结束分隔符
这似乎不遵循在整个文档的其余部分结束标记的一般规则,为什么它不需要在结束,为什么把它去掉不会导致"意外的文件结束"错误?
只有在脚本结束后要向浏览器输出内容时才退出PHP模式。如:
<?php
do_something_function();
?>
<div> this is HTML </div>
如果您不打算向浏览器发送任何其他内容,关闭?>
会打开您发送一些空白的可能性,这可能会产生一些意想不到的效果。如。如果用户想要下载一个秘密消息,您的脚本可能是:
<?php
//set headers for content type and size
//send message
echo $encrypted_msg;
?>
(<< there is unintended white-space here)
因为你在关闭?>
后发送了一些空白,浏览器将收到的不是预期的。消息可能已损坏,解密将失败。
另一个可能更典型的例子。假设您的前端代码向php脚本发出ajax请求,并希望接收JSON编码的信息。脚本如下:
<?php
header('Content-type: application/json');
echo json_encode(['name'=>'Dana']);
?>
(<< white-space)
在Firefox中,末尾的空白将导致400 Bad Request
错误,因为它将服务器响应转换为格式错误的JSON。
如果空白不在您正在编写的文件中,而是在另一个包含的文件中,则会出现更难解决的问题。考虑这种情况:
main.php
<?php
include 'value.php';
setcookie('pref_language', 'english'); //to remember user's preference
echo $value;
value.php
<?php
$value = 'Hi, this is value.php';
?>
(<< white-space)
即使您正在编写的文件(main.php)编写得很好,代码也会失败,因为必须在向浏览器发送任何内容之前设置cookie和标头,不幸的是,value.php
正在发出空白。如果您的大型程序包含许多脚本,那么处理此类错误可能是一场噩梦。
从手册:(归功于@chris85找到这个这么快)
PHP块在文件末尾的结束标记是可选的,并且在某些情况下,在使用include或require时省略它是有帮助的,所以不需要的空白将不会出现在文件的末尾,您将以后还可以在响应中添加报头。