Буфер вывода и функция die () / exit ()? - PullRequest
2 голосов
/ 30 декабря 2010

Я надеюсь, что все праздники идут хорошо.

Еще один вопрос, связанный с PHP здесь.Я использую выходные буферы в моем скрипте, потому что недавно я узнал, что это недопустимая причина (поэтому я могу передать заголовки позже в скрипте).Теперь я понимаю, что должен хранить все выходные данные в переменной или другом хранилище, пока не буду готов к выводу в конце сценария вместо использования выходных буферов.К сожалению, я уже кодировал эти функции и самопроизвольный вывод html на свои страницы.Я надеялся, что смогу решить эту проблему в версии 2 скрипта, так как у меня есть строгие сроки, чтобы встретиться с этой версией.

К данному вопросу.Я планировал сделать это, но, очевидно, функции die () и exit () не так хорошо работают с буферами вывода?У меня есть exit () после всех моих сообщений об ошибках, и вместо того, чтобы завершить выполнение в этот момент, кажется, что скрипт продолжает работать из-за буфера вывода.Я проверил эту гипотезу, удалив выходные буферы, и функции exit () работают должным образом.

Есть ли способ изменить это поведение, или я должен вернуться к чертежной доске и начать замену своих старых страниц??Кроме того, кто-то может объяснить мне, почему мы должны сохранять результаты до конца?Мне всегда интересно учиться.

Заранее всем спасибо!Наслаждайтесь последними днями 2010 года!

Ответы [ 2 ]

1 голос
/ 28 мая 2014

Разница между заголовком и фактическим содержимым страницы в основном только в той позиции, где они встречаются. Как следует из названия, заголовок находится в начале вывода. После этого отправляются две каретки / возврата (введите символы), и все после этого считается содержимым. Поэтому, если вы что-то повторяете, а затем хотите изменить заголовок, это невозможно сделать. Контентная часть уже закрыта заголовочной частью. То, что вы отправите в виде нового заголовка, теперь будет отображаться в виде обычного текста (если интерпретатор PHP не остановит вас, что он делает).

Что касается другой части вопроса, ob_flush - хорошее решение, как отметил Патрик.

1 голос
/ 30 декабря 2010

Несмотря на то, что я оставлю более сложные и абстрактные вопросы более разумным умам, чем я, я бы порекомендовал вам создать функцию-оболочку exit(), чтобы упростить код при возникновении ошибок.ie-

if(!$good)
{
    trigger_error('bleh', E_USER_WARNING);
    errorExit();
}

function errorExit()
{
    ob_flush();
    exit();
}

И замените все ваши выходы этим вызовом функции и таким образом буфер будет очищен, и программа выйдет в нужное время.

...