2012-12-25 49 views
0

我正在使用ob_get_contents()从php文件创建一个html文件。在开发机器上有时它可以工作,但在测试机器上它不起作用。Php ob_get_contents失败

<html> 
<body> 
    <div> 
     //some html content 
    </div> 
</body> 
</html> 

<?php 
    ob_start(); 
    file_put_contents('./pdfreportresult.html', ob_get_contents()); 

    require_once (APP_DIR . 'assessment/wkhtmltopdf/snappy-master/src/autoload.php'); 

    use Knp\Snappy\Pdf; 

    $snappy = new Pdf(APP_DIR . 'assessment/wkhtmltopdf/wkhtmltopdf.exe'); 

    header('Content-Type: application/pdf'); 
    header('Content-Disposition: attachment; filename="report.pdf"'); 
    echo $snappy->getOutput(APP_DIR . 'assessment/pdfreportresult.html'); 
    ob_end_clean(); 
?> 

我检查了测试机器的php.ini的output_buffering,它是“开”像在开发机器上。当我检查我创建的html文件“pdfreportresult.html”时,它是空的或半内容存在。

也许问题可能与缓冲区大小有关,我试图ob_clean()而不是ob_end_clean()仍然无法正常工作。

回答

2

启动缓冲区之前您开始输出内容。另外,一旦你完成缓冲区清理缓冲区。

<?php 
ob_start(); 
?> 
<html> 
<body> 
    <div> 
     //some html content 
    </div> 
</body> 
</html> 

<?php 
file_put_contents('./pdfreportresult.html', ob_get_contents()); 
ob_end_clean(); 
... 
+0

非常感谢你这是在开发和测试机器上工作。顺便说一句,缓冲可能会为将来的系统上的多个用户造成问题吗? – cgrgcn

+0

@cgrgcn缓冲可能会*减少多个用户之间发生并发问题的可能性。 –