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

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


person William Linton    schedule 07.08.2010    source источник
comment
разве вы не включаете его, используя URL-адрес HTTP вместо пути к файловой системе? путь кажется нормальным, но это наиболее вероятная причина   -  person Your Common Sense    schedule 07.08.2010
comment
Я включаю его, используя путь к файловой системе, потому что он находится за пределами корня документа (он содержит конфиденциальные данные, и я не хочу, чтобы он был общедоступным, независимо от того, защищен ли он .htaccess или нет).   -  person William Linton    schedule 07.08.2010


Ответы (1)


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

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

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

person William Linton    schedule 07.08.2010
comment
Имеет смысл. Вот почему я всегда ставлю die () после var_dump, чтобы убедиться, что я увижу результат, который хочу видеть :) - person Jani Hartikainen; 07.08.2010