可以使用header()创建任何应用程序而无需输出缓冲

 戒得掉既烟 发布于 2023-01-06 18:23

每次我用PHP创建网站或应用程序时,我必须使用header()函数将人们从一个页面重定向到另一个页面,但由于在我发现自己必须使用减慢页面速度的输出缓冲功能之前,几乎总是发送典型的标题.它要么是抑制"已发送标头"错误.我真的找不到任何可以在PHP中构建应用程序而不必违反这两者的示例.

我试图了解更多,关于如何在不使用输出缓冲的情况下重定向到页面.

编辑

这就是一些人认为可能的.

prepare('SELECT * FROM users where username = ? AND password = ?');
 $stmt->execute(array($_POST['username'], $_POST['password']);
 if($stmt->rowCount() == 0){
   $stack_errors = 'error, username or password is incorrect';
 }else{
   $stack_errors = false; 
 }
}else{
  $stack_errors = 'please enter username and password to log in';
}
if(false === $stack_errors){
  header('Location: /success.php');
  exit;
}
?>
 


IMSoP.. 5

一个编写良好的应用程序不应该有"太早"发送输出的问题,并导致PHP发出HTTP标头:

首先,可能会在处理输入和做出业务决策时发生可能导致重定向的决策; 在将任何内容输出到页面之前,此代码应完全完整.这确保您的类和函数只有一个责任,并允许您 - 至少在理论上 - 替换输出而不重写整个应用程序,例如创建机器可读的API版本.与您的评论相反,当您从事大型项目时,这一原则的重要性会增加.

其次,PHP本身可能会输出错误和警告,但应使用display_errorsini设置在生产系统上关闭这些错误和警告.您不希望用户看到代码中每个错误的血腥细节 - 充其量,他们会判断它; 在最坏的情况下,他们会探测安全漏洞.

第三,其他人指出了PHP标签之外的杂散空白和编辑器添加的Unicode BOM的问题.追踪这些可能很棘手,但绝不是不可能的 - 一个不错的编辑器将具有显示空白的功能,并且无需BOM即可保存.不使用结束可以避免尾随空格?>,因为它隐含在文件的末尾.如果使用gzip"输出过滤器",也会吞下少量输出; 这不会缓冲整个输出,但会一次缓冲几个字节,因此它有一些压缩的东西,所以给你一点点了.

1 个回答
  • 一个编写良好的应用程序不应该有"太早"发送输出的问题,并导致PHP发出HTTP标头:

    首先,可能会在处理输入和做出业务决策时发生可能导致重定向的决策; 在将任何内容输出到页面之前,此代码应完全完整.这确保您的类和函数只有一个责任,并允许您 - 至少在理论上 - 替换输出而不重写整个应用程序,例如创建机器可读的API版本.与您的评论相反,当您从事大型项目时,这一原则的重要性会增加.

    其次,PHP本身可能会输出错误和警告,但应使用display_errorsini设置在生产系统上关闭这些错误和警告.您不希望用户看到代码中每个错误的血腥细节 - 充其量,他们会判断它; 在最坏的情况下,他们会探测安全漏洞.

    第三,其他人指出了PHP标签之外的杂散空白和编辑器添加的Unicode BOM的问题.追踪这些可能很棘手,但绝不是不可能的 - 一个不错的编辑器将具有显示空白的功能,并且无需BOM即可保存.不使用结束可以避免尾随空格?>,因为它隐含在文件的末尾.如果使用gzip"输出过滤器",也会吞下少量输出; 这不会缓冲整个输出,但会一次缓冲几个字节,因此它有一些压缩的东西,所以给你一点点了.

    2023-01-06 18:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有