私は、ユーザーが PHP と MYSQLi を介して自分の日記エントリを DB に保存するオンライン ジャーナル/日記サイトを持っています。
メニュー リンクをクリックするだけで、ユーザーがすべてのエントリを PDF ファイルに保存できる機能を追加したいと考えています。
これを行う最善の方法は何ですか?私はDOMPDFを調べましたが、簡単で有望に思えましたが、それを機能させるには数日かかり、他のソリューションを検討する準備ができています.
おそらく多くの解決策があり、それを見つけるためだけに 3 日間を費やしたくありません。
更新 私はdompdfを機能させることができました.それはかなり簡単でうまく機能します. 私が遭遇した問題は、大量の HTML をレンダリングしようとするとクラッシュすることです。コードのメモリの問題のようです (Google コンセンサス)。例えば。私のDBには603のレコードがあり、各レコードには約2段落のテキストしかありません。私にとって、これは MYSQL DB の観点から言えば、大したことではありません。
Apache をクラッシュさせずに最大約 400 レコードを読み取れるように、最大タイムアウト設定を 320 秒に増やす必要がありました。SQL ステートメントに LIMIT 400 を追加すると、約 300 秒かかり、PDF ファイルが表示されます (長すぎて妥当ではありません)。LIMIT を 450 に増やすと、Apache がクラッシュします。Apacherエラーは、メモリの上書きなどに関連するものでした。したがって、400レコードが返されるまではかなりうまく機能し、レンダリングフェーズでは、遅くなり、約450レコードでクラッシュします。
私がグーグルで調べたところ、同様の問題を抱えている人がたくさん見つかったので、これは事実のようです。これは DOMPDF が知っていて、FAQ や修正で言及しているように見えますが、そうではありません。だから私はまだ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;