4

我已经在 php 中编写了一个代码,它将回显一个 pdf 文件。每当我试图回显该 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";

再编辑一次

我有另一个查询...我想将文件名更改为 $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 回答