【问题标题】:is what i'm trying to do with ob_start() possible?我想用 ob_start() 做什么可能吗?
【发布时间】:2013-04-21 22:31:54
【问题描述】:

我是 php 新手,正在尝试创建一个简单的脚本.. 但我不知道 ob_start() 是否可以尝试做,请告诉我,谢谢。 这是我的代码:

<?php
ob_start();

if($mystuff !== 0) { foreach($mystuff['sirf7alk'] as $mystuff) {
?>

<?php include('header.php'); ?>

App name: <?php echo $mystuff->app; ?>

<?php include('footer.php');?>

<?php
} } 

file_put_contents('page.php', ob_get_contents());
?>

这就是我的代码输出的内容:

my header content
App name: My app name
my footer content

这是我想要实现的目标:

<?php include('header.php'); ?>
App name: My app name
<?php include('footer.php');?>

【问题讨论】:

  • 在这个过程中为什么要写信给page.php?是否要在第二次请求时调用?您是想以这种方式更新多个页面,还是只更新一个?
  • 我正在尝试创建许多页面,但我想在所有页面中使用相同的页眉/页脚。
  • 此时通常建议为这些页面使用数据库。拥有一个用于混合页面布局和内容的处理程序/模板脚本更易于维护。拥有几十个 pageXYZ.php 副本会很快变得笨拙。
  • 是的,我确实考虑过创建一个数据库,但是当我表示我是 php 新手时,这对我来说更容易,因为我需要存储的数据是长文本(描述、长链接等) ..)

标签: php include ob-start


【解决方案1】:

您需要输出 PHP 代码,而不是运行 它。将其视为字符串即可:

ob_start();
if ($mystuff !== 0) {
    foreach($mystuff['sirf7alk'] as $mystuff) {
        echo "<?php include 'header.php' ?>".PHP_EOL;
        echo "App name: {$mystuff->app}".PHP_EOL;
        echo "<?php include 'footer.php' ?>".PHP_EOL;
    }
}
$output = ob_get_contents();
file_put_contents('page.php', $output);

现在已经回答了实际问题...以这种方式控制输出缓冲可能很有趣,但这可能不是世界上最好的主意,也就是说有更好的方法来实现相同的效果结果。例如。简单地使用一个辅助变量来保存原本输出的缓冲内容,是一种更明智的方法:

$output = '';
if ($mystuff !== 0) {
    foreach($mystuff['sirf7alk'] as $mystuff) {
        $output .= "<?php include 'header.php' ?>".PHP_EOL;
        $output .= "App name: {$mystuff->app}".PHP_EOL;
        $output .= "<?php include 'footer.php' ?>".PHP_EOL;
    }
}
file_put_contents('page.php', $output);

【讨论】:

    【解决方案2】:
    <?php
    ob_start();
    
    if($mystuff !== 0) { foreach($mystuff['sirf7alk'] as $mystuff) {
    
    echo "<?php include('header.php'); ?>\n";
    ?>
    App name: <?php echo $mystuff->app; ?>
    
    <?php
    echo "<?php include('footer.php');?>\n";
    
    } } 
    
    file_put_contents('page.php', ob_get_contents());
    ?>
    

    应该这样做。您必须将整个包含行作为字符串回显,以避免 php 解析它

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多