大文件不能长时间显示内联

时间:2018-04-02 20:44:10

标签: php

我的网站包含一个部分,允许用户访问受限制的PDF文件(如果他们有权访问这些文件)。基本上,他们到达一个页面,顶部有一个导航栏,允许他们在PDF文件之间循环。在此之下,有一个iframe链接到一个PHP页面,用于检索文件并显示它。此文件名为falr_pdf.php,根据访问方式,PDF文件可以内联显示,也可以作为附件下载。

这是导航栏页面,以及嵌入的falr_pdf.php IFRAME,为您提供清晰的想法。

https://i.imgur.com/VspEBHg.png

如您所见,PDF应该内嵌显示,然后如果用户单击“下载文件”,则会在新选项卡中打开相同的页面,但要将文件作为附件下载而不是内联显示。

我的问题是,这对于小型PDF文件来说完美无瑕,但是大于1.6MB的任何内容都需要花费相当长的时间来显示内联。但是,如果使用直接链接下载它们,则会以正常速度非常快速地下载。这是我正在使用的代码...

$path = $falr_filesbasedir . "/" . $folder . "_pdf/" . $file . ".pdf";
$public_name = basename($path);
header('Content-Length:'.filesize($path));
header('Content-type: application/pdf');
header('Content-Disposition: ' . $method . '; filename="' . $public_name . '"');
readfile($path);
exit;

现在我知道问题不在我的任何变量或链接中,因为它适用于每种类型的小文件,并且下载适用于大文件。只有大文件才能正确显示内联。

$method只有"inline""attachment"

这是readfile()的错误吗?或者它与我的PHP设置有关?

我在这里完全失败了。

1 个答案:

答案 0 :(得分:0)

你有没有试过看你的表演瀑布?您是否尝试将从Web服务器直接提供的文件作为静态文档进行访问?您是否尝试过在PHP代码中测量时序并将其与浏览器中发生的情况进行比较?客户端和服务器之间的延迟和带宽是多少?使用与服务器在同一主机上运行的客户端下载文件时会发生什么?服务器主机上是否有任何压力迹象?这些是你应该从调查开始的基本问题。

猜测,最可能的原因是在php或网络服务器上缓冲。如果将读取文件展开为读取/写入操作,并且刷新速度为200kb,则可以对此进行测试。但是你需要开始正确测量。