我有一个在线日记/日记网站,用户通过 PHP 和 MYSQLi 将他们的日记条目保存到我的数据库中。
我想添加一个功能,用户可以通过单击菜单链接将所有条目保存到 PDF 文件中。
做这个的最好方式是什么?我已经研究过 DOMPDF,它看起来很简单而且很有希望,但是让它工作已经花费了几天时间,我准备好看看其他解决方案。
也许有很多解决方案,我不想花 3 天时间来找出答案,这不适合我,所以我问那些做过类似事情的人,什么对你有用。
更新 我能够让 dompdf 工作,它相当容易并且工作得很好。我遇到的问题是,如果它尝试渲染大量 HTML,它会崩溃。似乎是代码的内存问题(谷歌共识)。例如。我的数据库有 603 条记录,每条记录只有大约 2 段文本。对我来说,从 MYSQL DB 方面来看,这不是我认为的 LARGE。
我不得不将最大超时设置增加到 320 秒,这样我才能让它读取大约 400 条记录而不会导致 Apache 崩溃。我将 LIMIT 400 添加到我的 SQL 语句中,这将需要大约 300 秒并显示 PDF 文件(太长而不合理)。如果我将 LIMIT 增加到 450,它会使 apache 崩溃。和 Apacher 错误与错误的内存覆盖等有关。所以它工作得很好,对我来说,直到返回 400 条记录,在渲染阶段,它会很慢并且在大约 450 条记录时崩溃。
这似乎是这种情况,因为我用谷歌搜索并发现很多人有类似的问题。这似乎是 DOMPDF 会知道并在他们的常见问题解答或修复中提到的东西,但他们没有。因此,尽管我仍然喜欢 PDF 选项。我选择简单地允许用户将数据保存为文本文件。这是非常简单的 PHP 编码(5 行),可以立即将我的数据保存为文件。
这是将数据保存到文本文件的代码的核心:
$myFile = "pdjentries.txt";
$fo = fopen($myFile, 'w') or die("can't open file");
$data = "ALL Your Entries from PersonalDreamJournal.com\r \n\r\n\r\n";
while ($row = $Recordset1->fetch_assoc() )
{
$data .= date("m-d-Y", strtotime($row['date'])).' '.$row['flag']. "\r\n";
$data .= $row['text']. "\r";
$data .= "****************************************************************";
$data .= "\r\n\r\n\r\n\r\n\r\n"; ;
} //end while
$data .='----END OF ALL ENTRIES-----';
header('Content-type: application/txt');
header('Content-Disposition: attachment; filename="pdj-entries.txt"');
echo $data;