0

私はアンカータグを持っています:

<a href="file.pdf">Download Me</a>

ユーザーがそれをクリックして、[名前を付けて保存]ダイアログボックスを表示し、新しいファイル名を決定してもらいたいと思います。

私はこれを見つけました(http://www.w3schools.com/php/func_http_header.asp):

header("Content-type:application/pdf");

// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");
                                
// The PDF source is in file.pdf
readfile("file.pdf");

それらのヘッダーをどこに置くかわかりません。ページの上部にありますか?これらの3行をリンクの真上に配置しようとすると、次のエラーが発生します。

警告:ヘッダー情報を変更できません-118行目の/home5/ideapale/public_html/amatorders_basic/admin/download.phpで(出力は/home5/ideapale/public_html/amatorders_basic/admin/download.php:38で開始)によって既に送信されたヘッダー

追加した両方のヘッダー行で同じエラーが発生しました。その直後には、数千行のASCII文字があります。jQueryまたはPHP(どちらか簡単な方)を使用して[名前を付けて保存]ダイアログボックスを表示するにはどうすればよいですか?

4

3 に答える 3

4

Stijn Van Baelのコードを使用するときは注意してください。これにより、深刻なセキュリティエクスプロイトが発生する可能性があります。

次のようなものを試してください:

--- download.php ---
$allowed_files = array('file.pdf', 'otherfile.pdf');

if (isset($_REQUEST['file']) && in_array($_REQUEST['file'], $allowed_files))
{
  $filename = $_REQUEST['file'];

  header("Content-type:application/pdf");
  header("Content-Disposition:attachment;filename='$filename'");

  // The PDF source is in file.pdf
  readfile($filename);

  exit();
}
else
{
  // error
}


--- linkpage.php ---
<a href="download.php?file=file.pdf">Download PDF</a>
<a href="download.php?file=otherfile.pdf">Download PDF</a>

おそらくこれを行うためのより良い方法は、Webサーバーレベル(これは.htaccessに入れることができます)です。これにより、これを配置したディレクトリ内およびその下にあるすべてのPDFがバイナリファイルとして扱われるようになります(ブラウザにダウンロードを強制します)。 。

<FilesMatch "\.(?i:pdf)$">
 Header set Content-Disposition attachment
 ForceType application/octet-stream
</FilesMatch>
于 2010-07-09T12:57:46.390 に答える
0

ヘッダーと読み取りファイルを使用して新しいページを作成し、ダウンロードリンクでそのページを参照するようにします。これにより、PDFファイルが返されます。

例えば:

<a href="download.php?file=file.pdf">Download Me</a>

download.phpのソース:

$filename = $_REQUEST['file'];
header("Content-type:application/pdf");
// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='$filename'");

// The PDF source is in file.pdf
readfile($filename);
于 2010-07-09T11:16:15.420 に答える
0

downloadまたは、htmlのアンカータグで新しいHTML5プロパティを使用することもできます。

コードは次のようになります

<a download href="path/to/the/download/file"> Clicking on this link will force download the file</a>
于 2013-08-21T05:48:49.387 に答える