Netbeans建议我在PHP中不要有关闭页面标签,为什么?

  • 本文关键字:标签 PHP Netbeans php netbeans
  • 更新时间 :
  • 英文 :


在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时省略它是有帮助的,所以不需要的空白将不会出现在文件的末尾,您将以后还可以在响应中添加报头。

相关内容

  • 没有找到相关文章

最新更新