【问题标题】:headers already sent with require [duplicate]已使用 require 发送的标头 [重复]
【发布时间】:2013-04-04 23:34:11
【问题描述】:

我正在使用 curl 编写登录页面,因此我需要获取一些变量到名为 action.php 的下一页。

这是我的代码:

global $var1;
global $var2;

if(isset($match[1][0])){
mail($send,$subject,$message,$headers);
header('Location: page1.php');}else{
header('Location: page2.php');}

page1.php

require('action.php');

echo $var1;

echo $var2;

它没有让我知道变量。

我也看到了

Warning: Cannot modify header information - headers already sent by (output started at on page1.php

有什么建议吗?

【问题讨论】:

  • 谢谢,但它没有解决传递 $vars
  • 我的建议是您修复错误。如何解决它取决于您尝试实现的目标。从您问题中的(不完整)代码中不清楚这一点。这听起来更像是一个支持请求,而不是一个编程问题。

标签: php curl header include


【解决方案1】:

您关于警告的问题已经得到解答(使用header()之前不要发送任何输出),但是页面之间没有传递数据的问题没有。

无法在 2 个 PHP 脚本之间访问全局变量 - HTTP is stateless

使用会话或其他方式使数据在两个页面之间可访问。

session_start();
$_SESSION['var1'] = 'some value';
$_SESSION['var2'] = 'some value';

if(isset($match[1][0])){
    mail($send,$subject,$message,$headers);
    header('Location: page1.php');
}else{
    header('Location: page2.php');
}

session_start();
require('action.php');
echo $_SESSION['var1'];
echo $_SESSION['var2'];

【讨论】:

  • 感谢它有效,但我发现警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送
  • 确保在调用 session_start() 的行之前没有任何 HTML 或 PHP 输出(例如 echo、print)。
  • 修复它的问题是:不要在其他文件上包含
  • 很高兴一切正常! :)
【解决方案2】:

如果您已经将任何内容写入屏幕,则不能使用标题重定向。

因此,即使您正在执行 echo "hello" 或在其之前有 <html>,标头命令也无法使用 javascript 重定向进行后输出重定向或使用输出缓冲,这将允许您执行后输出重定向'只会在你告诉它时写出缓冲区。

希望这是有道理的

【讨论】:

  • 这是我文件上的另一个页面,所以有没有其他方法或将它们放在一个页面上
【解决方案3】:

这是PHP Manual

请记住,必须在任何实际输出之前调用 header() 通过普通 HTML 标记、文件中的空行或 PHP 发送。 使用 include 或 require 读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 在调用 header() 之前输出的行。同样的问题 使用单个 PHP/HTML 文件时存在。

自己看看哪里出了问题。

编辑:您可以通过将值设置为 $_SESSION[] 并在另一侧读取它们来传递变量。

【讨论】:

  • 我尝试了很多,我将 curl 命令包含在 2 个页面上它不起作用,所以我如何将变量从提交表单传递到其他页面
  • 您可以通过将值设置为 $_SESSION[] 并在另一侧读取它们来传递变量。
  • 我必须做 rquire 还是 include
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2011-07-04
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
相关资源
最近更新 更多