使用php能够调用浏览器显示给定的PDF,它不能在我的网络主机上运行。但它可以在我的本地xamp服务器上使用apache。
PHP:
$title = $_GET['title'];
$loc = $_GET['loc'];
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=".$title);
@readfile($loc);
预期输出:假设PDF文档的呈现方式与我本地网络服务器上的相同。
实际但不需要的输出 %PDF-1.6%����16380 obj<> endobj xref 1638 44 0000000016 00000 n ...
这是通过更改我的cpanel上的内容来解决的吗?由于我的代码没有错误......它可以在我的本地Web服务器上运行。
答案 0 :(得分:2)
使用此代码
<?php
$file = 'dummy.pdf';
$filename = 'dummy.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
@readfile($file);
?>
答案 1 :(得分:0)
在编写标题之前,您需要确保没有发送任何文字。
不要做:
的示例<!DOCTYPE html>
<html>
...
<?php
header("Content-type: application/pdf");
如何解决该问题的示例:
<?php
header("Content-type: application/pdf");
?>
<!DOCTYPE html>
<html>
...
此外,您的脚本非常不安全。这是你应该做的,你的整个PHP脚本应该是:
<?php
$loc = filter_input(INPUT_GET,"loc");
$title = filter_input(INPUT_GET,'title')?:basename($loc);
if (!is_readable($loc)) {
http_response_code(404);
echo "Cannot find that file";
die();
}
if (strtolower(pathInfo($loc,PATHINFO_EXTENSION)) != "pdf") {
http_response_code(403);
echo "You are not allowed access to that file";
die();
}
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=".$title);
header("Content-Length: ".filesize($loc));
readfile($loc);
如果你想要显示页面标题或框架周围的内容,你应该在另一个&#34;包装器中使用iframe&#34;页:
<?php
$loc = filter_input(INPUT_GET,"loc");
$title = filter_input(INPUT_GET,'title')?:basename($loc);
?>
<html><head><title>My title</title></head>
<body>
<iframe src="/view.php?<?php echo ($loc?"loc=$loc":"").($title?"title=$title":"") ?>">
</iframe>
</body>
<html>