Включенные сценарии PHP не могут получить доступ к $ _POST при буферизации вывода? - PullRequest
3 голосов
/ 07 августа 2010

У меня есть HTML-форма POSTing к следующему 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 не имеет никакого эффекта.

Если я поставлю var_dump ($ _ POST) перед ob_start (), ИЛИ, если я вообще удаляю буферизацию вывода, проблема исчезает, но мне нужна буферизация вывода.Поэтому, пытаясь разобраться в проблеме, я попытался отправить данные формы в файл 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.Я пытаюсь action = "/ index.php" и ничего не меняется, поэтому это не должно иметь значения.

1 Ответ

2 голосов
/ 07 августа 2010

Я понял причину моей проблемы.Убрав выходную буферизацию, я внимательно посмотрел на сообщения об ошибках и понял, что у меня есть вызов header ("Location: ...") в моем файле file.php.Я перенаправлял на другой скрипт, в котором пытался вызвать информацию $ _POST.Но информация $ _POST, очевидно, не передается вместе с перенаправлением header ().

Интересно, что у меня была переменная var_dump ($ _ POST) до header ()вызов.И я предполагаю, что буферизация вывода привела к тому, что сначала был отправлен вызов header (), и, следовательно, после этого в буфере не было выведено ни одного вывода, потому что заголовок («Location») перенаправляется без отображения какого-либо вывода скрипта после него.Это звучит правильно?

(Отвечая на мой вопрос а-ля https://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions)

...