2

PDFファイルを送信しようとしています。実行中のコードは次のとおりです。

$file_path = '/path/to/file/filename.pdf'
$file_name = 'filename.pdf'

header("X-Sendfile: $file_path");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename='$filename'");
readfile($file_path):

ファイルを直接ダウンロードするときはいつでも問題ありません。ただし、このスクリプトを使用してファイルをダウンロードしようとすると、開くことができないファイルがダウンロードされます。私のpdfリーダーは、「text/plain」タイプのファイルを開くことができないと言っています。も に設定しようとしContent-typeましapplication/pdfたが、同じエラーが発生します。ここで何が間違っていますか?

4

2 に答える 2

4

これを試しましたか?

$file = '/path/to/file/filename.pdf';
header('Content-Disposition: attachment; filename="'. basename($file) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);

readfile()を使用すると、発生する可能性のあるメモリの問題も解消されます。

于 2013-01-23T16:15:51.790 に答える
1

以下のコードを試してください。

header("Content-Type: application/octet-stream");

$file = "filename.pdf";
header("Content-Disposition: attachment; filename=" . urlencode($file));   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); // this is essential for large downloads
} 
fclose($fp)

上記のものが役に立たない場合は、以下を試してください

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename=' . urlencode(basename($file)));
// header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;

必要に応じてファイルパスを設定しないでください$file_path

于 2013-01-23T16:12:28.340 に答える