Использование заголовка («Местоположение») из шаблона включаемого файла / Процесс включения и сохранения в переменной - PullRequest
0 голосов
/ 28 июня 2010

Я пытаюсь найти способ сделать это:

Я хочу иметь основной файл шаблона (structure.php):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php include_once(NAKIDROOT."includes/head.php"); ?>
</head>
<body>
<div id="all">
  <div id="page">
    <?php include_once("includes/header.php"); ?>
    <div id="main">
      <div id="left">
        <?php include_once("includes/left.php"); ?>
      </div>
      <div id="content">
      <?php include_once("includes/messages.php"); ?>
      <?php include_once("includes/page.php"); ?>
      </div>
      <?php include_once("includes/footer.php"); ?>
    </div>
  </div>
</div>
</body>
</html>

Мне бы хотелось, чтобы у включаемых файлов была возможность запускать заголовок (Location), если это необходимо, поэтому мне кажется, что мне нужно как-то заставить php читать каждый из этих включаемых файлов.

Есть ли способ отобразить include для проверки сначала заголовков и прочего и поместить его содержимое в переменную, так что вместо этого мой структурный файл будет выглядеть так:

<div id="page">
    <?php echo($header); ?>
    <div id="main">
      <div id="left">
        <?php echo($left); ?>
      </div>
      <div id="content">
      <?php echo($messages); ?>
      <?php echo($page); ?>
      </div>
      <?php echo($footer); ?>
    </div>
  </div>

1 Ответ

4 голосов
/ 28 июня 2010

Вы не можете отправлять заголовки после того, как вы начали в теле ответа HTTP (т.е. после того, как вы что-то вывели, это включает в себя вещи вне тегов <?php). Быстрое решение заключается в использовании буферизации вывода с использованием ob_start() и связанных функций. Это всего лишь пластырь; вам следует попытаться реструктурировать свой код, чтобы вам не приходилось полагаться на буферизацию вывода, если это возможно.

Чтобы использовать ob_start(), просто вызовите его сверху и вызовите ob_end_flush() внизу вашего скрипта.

...