是我想用ob_start()做什么?

问题描述:

我是新来的PHP,并试图创建一个简单的脚本..但我不知道我想要做什么可能与ob_start()请让我知道,谢谢。 这里是我的代码:是我想用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');?> 
+0

你为什么要写信给'在这个过程中page.php'?这是否被第二个请求调用?你是否试图以这种方式更新多个页面,或只是那个? – mario 2013-04-21 22:34:23

+0

我正在尝试创建很多页面,但我想在所有页面中使用相同的页眉/页脚。 – Jnafo 2013-04-21 22:39:47

+0

此时通常建议使用这些页面的数据库。拥有用于混合页面布局和内容的处理程序/模板脚本更具可维护性。拥有数十页page.xYZ.php副本会变得很笨重。 – mario 2013-04-21 22:42:44

<?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()); 
?> 

应该这样做。您必须呼应整个包括行视为字符串,以避免解析它

+0

谢谢,这个作品! – Jnafo 2013-04-21 22:38:20

您需要输出 PHP代码,而不是运行它的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);