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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 01:42:42  来源:igfitidea点击:

PHP - Read dynamically generated (and echoed) HTML into a string?

phpdompdf

提问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 附加到输出缓冲区,然后丢弃所有内容。