3

次のindex.phpに投稿するHTMLフォームがあります。

<?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 に移動しても効果はありません。

var_dump($_POST)を ob_start() のに置くか、出力バッファリングを完全に削除すると、問題はなくなりますが、出力バッファリングが必要です。そこで、問題を突き止めるために、フォーム データを test.php に POST してみました。

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

そして、それはすべてうまく表示されました。したがって、私のfile.phpの問題は、それが含まれていることと、出力バッファリングを使用していることのようです。セットアップに問題がありますか? $_POST に含まれている出力バッファ スクリプトからアクセスできないのはなぜですか? これを修正する方法、または代替手段はありますか? ありがとう。

編集:もう1つの考えられる要因:私のHTMLフォームタグはこれです:

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

mod_rewrite を使用して、それを index.php にリダイレクトします。action="/index.php" を試しても何も変わらないので問題ありません。

4

1 に答える 1

3

私は自分の問題の原因に気づきました。出力バッファリングを削除した後、エラー メッセージを詳しく調べたところ、file.php に header("Location: ...") 呼び出しがあることに気付きました。$_POST 情報を呼び出そうとした別のスクリプトにリダイレクトしていました。しかし $_POST 情報は明らかに header() リダイレクトと一緒に転送されません。

これに関する興味深い点は、header() 呼び出しの前にvar_dump($_POST) があったことです。そして、出力バッファリングにより header() 呼び出しが最初に送信されたため、その後のスクリプト出力を表示せずに header("Location") がリダイレクトされるため、バッファ内のその後の出力は表示されなかったと思います。そうですか?

( https://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questionsのように自分の質問に答える)

于 2010-08-07T07:51:56.053 に答える