4

私は、pdfファイルをエコーするphpでコードを書きました。そのpdfをエコーし​​ようとするたびに、ブラウザページが灰色に変わり、左下隅に読み込みアイコンが表示され、その後表示に失敗しますそのpdfファイル。

データベースからデータを取得するまでのコードが完璧であることを保証できます。エラーや間違いはありません。データを取得した後、次のヘッダーを使用してそのファイルをエコーし​​ました。これらのヘッダーについてはわかりません。

$mimetype = 'application/pdf';
$disposition = 'attachment';
header('Content-type: $mimetype');
header('Content-Disposition: inline; filename="$question"');
header('Content-Transfer-Encoding: binary');
header('Content-length: ' . strlen($question));
header('Accept-Ranges: bytes');
echo "$question";

注: content-decomposition で .pdf 拡張子を使用しましたが、それは私にとって実りの多いものではありませんでした。readfile() 関数も使用しましたが、これも役に立ちませんでした。何が悪いのか誰か教えてもらえますか?

4

1 に答える 1

6

主な理由page is changing into gray colorsは、ブラウザーがコンテンツ タイプを正しく検出できないことです。

これを試して:

header("Content-type: $mimetype");
header('Content-Disposition: inline; filename="'.$question.'"'); // Filename should be there, not the content

それ以外の :

header('Content-type: $mimetype');
header('Content-Disposition: inline; filename="$question"');

引用符が無効なようで、コンテンツ タイプが正しく指定されていません。

編集

$question明確にするために、それがバイナリ PDF コンテンツであると仮定しましょう。
それはあなたのコードがどうあるべきかです:

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename=anything.pdf');
header('Content-Transfer-Encoding: binary');
echo $question;

エラーの説明

元のコードとエラーについて話し合いましょう。

$mimetype = 'application/pdf';
$disposition = 'attachment';

// First error: you have single quotes here. So output is 'Content-type: $mimetype' instead of the 'Content-type: application/pdf'
header('Content-type: $mimetype');

// Second error. Quotes again. Additionally, $question is CONTENT of your PDF, why is it here?
header('Content-Disposition: inline; filename="$question"');


header('Content-Transfer-Encoding: binary');

// Also bad: strlen() for binary content? What for?
header('Content-length: ' . strlen($question));


header('Accept-Ranges: bytes');
echo "$question";

もう1つの編集

別のクエリがあります... ファイル名を $year.pdf に変更したい..$ year には 2007 のような値が含まれている可能性があります..どうすればそれを行うことができますか?

これを試して :

$year = '2013'; // Assign value
header('Content-Disposition: inline; filename='.$year.'.pdf');

それ以外の:

header('Content-Disposition: inline; filename=anything.pdf');
于 2013-03-14T14:42:34.257 に答える