0

Web サイトの訪問者をページ A からページ B にリダイレクトします。ページ BI では、ユーザーがダウンロードした PDF ファイルを取得することを期待しています (ページ B の読み込み時にダウンロードされます)。私は別の記事からコードを取得しました (ここで回答された以前の質問を参照してください)。ページ B のコードは次のとおりです。

<?php
header('Content-Disposition: attachment; filename=nature.pdf');
header('Content-type: application/pdf'); 
$fn=fopen("/wp-content/nature.pdf","r");
fpassthru($fn);
?>

出力は、ダウンロード ダイアログ ボックスを開くことによるものではなく、次のような判読できない文字がブラウザーに表示されます (以下の小さなサンプルをピックアップしました)。

%PDF-1.4 %���� 3 0 obj <>ストリーム x���MK1�o�+�$zIg&�� V=T�=Xo����K��i+#V�yx3��඀ (BX�pW`

サーバー: OS Linux; PHP バージョン: 5.2.17

訪問者 -> ブラウザ: Firefox; OS: Windows2000

クライアント側のOSが古いために失敗する可能性はありますか? そうでない場合、ダウンロードを強制する方法を知っている人はいますか? どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

1

Content-Length ヘッダーで試してください。

ob_clean(); ob_start();
header('Content-Disposition: attachment; filename=nature.pdf');
header('Content-type: application/pdf'); 
header ("Content-Length: ".filesize("/wp-content/nature.pdf"));
readfile("/wp-content/nature.pdf");
exit;
于 2012-06-24T13:41:26.957 に答える
0

Content-disposition が最初に導入されたとき、非常に古いブラウザには癖がありました。一部の非常に古いブラウザでは、開こうとしているファイルの種類を認識できない場合を除き、[名前を付けて保存] ダイアログが表示されませんでした。Content-type を何も設定しない (または認識できないもの) に設定してみて、それによって古いブラウザーで [名前を付けて保存] ダイアログが強制的に表示されるかどうかを確認してください。

header('Content-type: ');

それが機能する場合は、PHP の行を追加して、その行を実行する前に古いブラウザーを使用しているかどうかを検出することをお勧めします。最新のブラウザーはそのヘッダーを使用して、ファイルを開くプログラムを決定します。

于 2012-06-24T14:16:52.047 に答える