我在存储服务器上有一些pdf文件,我想向用户显示它们而不向他们展示真正的文件路径,我想用PHP做这件事。
我试过这个:
$file = 'https://storage.server_test.com/agc/catalogs/catalog1.pdf';
$filename = 'catalog.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);
但是pdf根本没有显示,我收到了这个错误:This PDF document might not be displayed correctly.
我做错了什么?
答案 0 :(得分:0)
您是否尝试使用html object
代码嵌入它?
<object data="https://storage.server_test.com/agc/catalogs/catalog1.pdf" type="application/pdf">
<embed src="https://storage.server_test.com/agc/catalogs/catalog1.pdf" type="application/pdf" />
</object>
或者在php中,试试这个标题:
header('Content-Disposition: attachment; filename="' . $filename . '"');
最后,如果@readfile($file)
无效,请尝试:
echo @file_get_contents($file);
在本地尝试这个之后,我想我设法让它运转起来。试试这个:
<?php
$remote_pdf = 'http://www.saronicferries.gr/content/pdfFiles/sample.pdf';
$remote_file_name = end(explode('/', $remote_pdf));
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="'. $remote_file_name .'"');
header('Content-Transfer-Encoding: binary');
readfile($remote_pdf);
?>
输出:
我认为问题是filesize($file)
失败了远程文件。删除它和header('Accept-Ranges: bytes');
后,它可以正常工作。