5

生のバイナリ データから PDF ファイルを作成していますが、完全に機能していますが、PHP ファイルで定義したヘッダーが原因で、ユーザーはファイルを「保存」するか「開く」ように求められます。ここのローカルサーバーにファイルを保存する方法はありますかhttp://localhost/pdf?

以下は、私のページで定義したヘッダーです

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Transfer-Encoding: binary");
4

2 に答える 2

10

訪問者にファイルをダウンロードさせるのではなく、サーバーにファイルを保存したい場合は、ヘッダーは必要ありません。ヘッダーは、送信する内容をクライアントに伝えるためのものであり、この場合は何もありません (ただし、新しく作成した PDF などにリンクするページを表示している可能性があります)。

そのため、代わりにfile_put_contents、ファイルをローカルに保存するなどの機能を使用して、最終的には Web サーバーにファイル転送と HTTP ヘッダーを処理させます。

// Let's say you have a function `generate_pdf()` which creates the PDF,
// and a variable $pdf_data where the file contents are stored upon creation
$pdf_data = generate_pdf();

// And a path where the file will be created
$path = '/path/to/your/www/root/public_html/newly_created_file.pdf';

// Then just save it like this
file_put_contents( $path, $pdf_data );

// Proceed in whatever way suitable, giving the user feedback if needed 
// Eg. providing a download link to http://localhost/newly_created_file.pdf
于 2012-02-15T13:00:48.940 に答える
0

出力制御機能を使用できます。スクリプトの先頭に ob_start() を配置します。最後に ob_get_contents() を使用して、コンテンツをローカル ファイルに保存します。

その後、PDF をブラウザにも出力するか、ユーザーを他のページにリダイレクトするかに応じて、ob_end_clean() または ob_end_flush() を使用できます。ob_end_flush() を使用する場合は、データをフラッシュする前にヘッダーを設定してください。

于 2012-02-15T13:06:26.787 に答える