在PHP中暂停输出缓冲区

时间:2012-01-22 06:34:47

标签: php output-buffering

这是我的问题。我希望能够只缓冲表的内容而不是标题。是否有可能在php中暂停输出缓冲,以便我可以跳过表头上的缓冲并在实际内容的开头再次恢复?

<?php ob_start(); ?>
<table>
<tr>
    <th>Account</th>
    <th>Quarter</th>
    <th>Amount</th>
</tr>
    <?php 
    foreach($tc_item as $v){ 


    if($v->dbl_amt != 0){
    ?>
    <tr>
    <!-- Nature of Collection -->
        <td id="nature"><?php echo $v->strDescription; ?></td>
     <!-- Account Code -->     
        <td id="account"><?php echo $v->str_details; ?></td>
     <!-- Amount -->
        <td id="amount"><?php echo number_format($v->dbl_amt,2, '.', ''); ?></td>

    </tr>
    <?php } ?>
    <?php } ?>

</table>
<?php 
$_SESSION['or_details'] = ob_get_contents();
?>

2 个答案:

答案 0 :(得分:2)

如果你不想缓冲整个表,那么不要缓冲它:

<table>
  <thead></thead>
  <?php ob_start();?>
  <tbody></tbody>
  <?php $tbody = ob_get_flush(); ?>
</table>

如果你想缓冲整个表,但想要分别使用表体,那么再添加一个缓冲级别:

<?php ob_start();?>
<table>
  <thead></thead>
  <?php ob_start();?>
  <tbody></tbody>
  <?php $tbody = ob_get_flush(); ?>
</table>
<?php $table = ob_get_clean(); ?>

或者,您可以刷新当前缓冲区而不创建新缓冲区。我不建议这样做,因为它会使您的代码更难以遵循。这也很愚蠢,因为如果你只是在没有捕获字符串的情况下进行刷新,那么你最好不要在第一时间缓冲:

<?php ob_start()?>
<table>
  <thead></thead>
  <?php ob_flush();?>
  <tbody></tbody>
  <?php $tbody = ob_get_contents(); // only contains output since last flush ?>
</table>
<?php ob_end_flush(); ?>

答案 1 :(得分:0)

在标题

之后开始缓冲
<table>
<tr>
    <th>Account</th>
    <th>Quarter</th>
    <th>Amount</th>
</tr>
<?php
ob_start();
echo "table data";
ob_end_flush();