2012-03-21 17 views
3

おはようございます。AJAXスクリプトで生成されたファイルを保存する

私はAjaxのスクリプトを介して、いくつかのPDFファイルを生成するためのYiiフレームワークとMPDFライブラリを使用していると私は、ユーザーのブラウザで対話「として保存」を強制する必要があります。

私は1つのファイルをdowloading単一のユーザーでこの問題を解決する方法を知っています。誰も私が高負荷システム上のすべてが仕事(例えば、PDFを生成してダウンロードしようとしている複数のユーザーがエラーを引き起こす一時ファイルにアクセスしようとします)作ることができる方法についてのヒントを持っています ?

私はセッションごとに個別のファイルを生成する必要がありますか?そして、どのようにこれらの一時ファイルをクリーニングするためにいいですか?

ありがとうございました。

+0

みんなありがとう、すべてが – Elena

+0

は温度を作成することによって、それを解決しよう^^朝にしようとするつもり、明確なようですファイル。ご協力いただきありがとうございます! – Elena

答えて

1

あなたは一時ファイルを生成するtempnamhttp://www.php.net/manual/en/function.tempnam.phpを使用する必要があります。彼らは一意に名前が付けられるので、セッションごとに1つ作るのは簡単でしょう。あなたがそれらを完了したら、通常のように削除してください。

1

は、目に見えないのiframeを作成します。 JSから、そのiframeのsrcを、PDFを生成するサーバー上のスクリプトに設定します。その後

<iframe src="http://yoursite.com/download-file.php?report=pdf&param1=value1&param2=value2..." width="1" height="1"></iframe> 

(と私はあなたがMPDFでこれを行うかどうかはわかりません)点が、直接ブラウザに出力するスクリプトからファイルです。これは次のようなものです:

<?php 
    $x = some_function($_GET['param1'],$_GET['param2', ...); // PDF GEN. ROUTINE, BASED ON REQUEST DATA, HOWEVER YOU DO IT 
    header('Content-type: application/pdf'); 
    echo $x; 

これはあなたの懸念をすべて解決するはずです。

1

まず第一に、私は、一人のユーザのダウンロード誰か他の人のPDFのようなすべての可能なエラーを回避するためには、PDFを生成し、それぞれに異なる一時ファイルを生成することなどをあなたにお勧めしたい

一時をクリーンアップするにはディレクトリ、私はN日より古いすべてのファイルを削除するcronジョブを使用したいと思います。

「保存ダイアログ力」にするために、あなたはattachmentContent-dispositionヘッダーを設定する必要があります。

header('Content-Disposition: attachment; filename="myfile.pdf"'); 
関連する問題