PHP - 将动态生成(和回显)的 HTML 读入字符串?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1245438/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
PHP - Read dynamically generated (and echoed) HTML into a string?
提问by bcmcfc
I have a file that pulls some information from the database and creates some relatively simple dynamic HTML.
我有一个从数据库中提取一些信息并创建一些相对简单的动态 HTML 的文件。
The file can then be used by DOMPDF to turn it into a PDF document. DOMDPF uses GET variables to achieve the basic implementation.
然后 DOMPDF 可以使用该文件将其转换为 PDF 文档。DOMDPF 使用 GET 变量来实现基本实现。
ob_start();
include_once("report.php?id=1249642977");
require_once("dompdf/dompdf_config.inc.php");
$dompdf = new DOMPDF();
$dompdf->load_html(ob_get_contents());
$dompdf->render();
$dompdf->stream("sample.pdf", array('Attachment'=>'0'));
ob_end_clean();
I thought I might be able to use something ilke that to achieve the aim but unsurprisingly it didn't work.
我以为我可以使用类似的东西来实现目标,但不出所料,它不起作用。
So how can I read the HTML that gets output to the browser if you were to load the file directly, into a string for use with the DOMPDF class?
那么,如果您要直接将文件加载到用于 DOMPDF 类的字符串中,我该如何读取输出到浏览器的 HTML?
回答by Andrea Fiore
What about using a simple HTTP request to get the HTML file and than loading it in the $dompdf object:
使用简单的 HTTP 请求来获取 HTML 文件并将其加载到 $dompdf 对象中怎么样:
<?php
//...
$dompdf->load_html(file_get_contents("http://yoursite.net/report.php?id=1249642977"));
//...
?>
I don't see why you need output buffering here..
我不明白为什么你需要输出缓冲在这里..
回答by BlackAura
Two problems.
两个问题。
First, you can't call a PHP page like that using include_once - the query string will be ignored. You have to give the id to report.php some other way.
首先,您不能使用 include_once 调用这样的 PHP 页面 - 查询字符串将被忽略。您必须以其他方式将 id 提供给 report.php。
Second, you're correctly buffering the output. However, you're passing the current output buffer to DOMPDF, telling it to generate a PDF to the output buffer, and the discarding the output buffer. You probably want something like:
其次,您正确地缓冲了输出。但是,您将当前输出缓冲区传递给 DOMPDF,告诉它生成一个 PDF 到输出缓冲区,并丢弃输出缓冲区。你可能想要这样的东西:
$dompdf = new DOMPDF();
$dompdf->load_html(ob_get_clean());
$dompdf->render();
$dompdf->stream("sample.pdf", array('Attachment'=>'0'));
That'll get the current output buffer, discard it, and disable output buffering. The $dompdf->stream should then work.
这将获取当前输出缓冲区,丢弃它,并禁用输出缓冲。然后 $dompdf->stream 应该可以工作。
回答by Kevin Jantzer
BlackAura is on the right track. File_get_contents, as others have suggested will not pass along the GET vars (or POST). But you can use cURL to do that. The code below should work:
BlackAura 走在正确的轨道上。File_get_contents,正如其他人所建议的那样不会传递 GET 变量(或 POST)。但是您可以使用 cURL 来做到这一点。下面的代码应该工作:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://YOURFULLURL.COM/report.php?id=1249642977');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$my_html = curl_exec($ch);
curl_close($ch);
$dompdf = new DOMPDF();
$dompdf->load_html($my_html);
$dompdf->render();
$dompdf->stream("sample.pdf", array('Attachment'=>'0'));
Hope that helps.
希望有帮助。
-Kevin
-凯文
回答by Yuval Karmi
Simply use PHP's file_get_contentsas such:
只需file_get_contents像这样使用 PHP :
$page_html = file_get_contents("page.php?id=number");
then pass $page_html to dompdf.
然后将 $page_html 传递给 dompdf。
Hope this helps :)
希望这可以帮助 :)
回答by bcmcfc
I eventually decided to alter the php page that produces the HTML so that it becomes a function returning an HTML string. This is more of a workaround than a solution.
我最终决定更改生成 HTML 的 php 页面,使其成为返回 HTML 字符串的函数。这与其说是解决方案,不如说是一种变通方法。
Future Googlers to this page should be aware that DOMPDF allows you to run inline PHP on a page using:
此页面的未来 Google 员工应该知道 DOMPDF 允许您使用以下方式在页面上运行内联 PHP:
<script type="text/php">
//some PHP here
</script>
回答by bcmcfc
BlackAura has the right idea. You're appending the generated PDF to the output buffer, and then discarding everything.
BlackAura 的想法是正确的。您将生成的 PDF 附加到输出缓冲区,然后丢弃所有内容。

