输出缓冲时,包含的PHP脚本无法访问$ _POST?

时间:2010-08-07 06:53:10

标签: php forms post include output-buffering

我有一个HTML表单POST到以下index.php:

<?php require_once("/home/full/path/to/included/file.php"); ?>

在file.php中,我正在尝试访问$ _POST:

ob_start();
session_start();
var_dump($_POST);
$contents = ob_get_contents();
ob_end_clean();
echo $contents;

但是var_dump($ _ POST)返回一个空数组。

将ob函数移动到index.php无效。

如果我在 ob_start()之前放入var_dump($ _ POST),或者如果我完全删除输出缓冲,问题就会消失,但我需要输出缓冲。因此,为了解决问题,我尝试将表单数据发布到test.php:

ob_start();
$session_start;
var_dump($_POST);
$contents = ob_get_contents();
ob_end_clean();
echo $contents;

它显示一切都很好。所以我的file.php问题似乎是包含它,并使用输出缓冲。你看到我的设置有问题吗?为什么$ _POST不能被包含的输出缓冲脚本访问?你有没有办法解决这个问题,还是另类?感谢。

编辑: 另一个可能的因素: 我的HTML表单标签是这样的:

<form action="/" method="POST">

我使用mod_rewrite将其重定向到index.php。我尝试动作=“/ index.php”并没有任何改变,所以它应该没关系。

1 个答案:

答案 0 :(得分:2)

我意识到了问题的原因。删除了输出缓冲后,我仔细查看了错误消息,发现我的file.php中有一个标题(“Location:...”)调用。我正在重定向到另一个脚本,我试图调用$ _POST信息。但是$ _POST信息显然不会与header()重定向一起传输。

有趣的是,我在 header()调用之前有一个var_dump($ _ POST)。我猜测输出缓冲导致首先发送header()调用,因此在缓冲区之后没有显示输出,因为标题(“Location”)重定向而不显示任何脚本输出。听起来不错吗?

(回答我自己的问题la https://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions