Php 长时间不在线显示大文件

Php 长时间不在线显示大文件,php,Php,我的网站包含一个部分,允许用户访问受限制的PDF文件,如果他们有权访问它们的话。基本上,他们到达一个顶部有导航条的页面,允许他们在PDF文件之间循环。下面是一个iframe,它链接到一个PHP页面,该页面用于检索文件并显示它。该文件称为falr_pdf.php,根据访问方式,pdf文件可以内联显示,也可以作为附件下载 下面是导航栏页面,以及内嵌的falr_pdf.php IFRAME,让您有一个清晰的想法 如您所见,PDF应该以内联方式显示,然后如果用户单击“下载文件”,则在新选项卡中打开相同

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

下面是导航栏页面,以及内嵌的falr_pdf.php IFRAME,让您有一个清晰的想法

如您所见,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
只是
的“内联”或
的“附件”

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


我在这里完全不知所措。

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


据猜测,最可能的原因是php或Web服务器上的缓冲。如果将readfile展开为读/写操作,每次刷新200kb,则可以对此进行测试。但是您需要开始正确地测量。

可以使用php.ini设置。看看这是否有帮助:您可能只是一次向浏览器发送了太大的数据块。浏览器上存在资源限制,有时您会遇到这些限制。您可以尝试使用输出缓冲的一些技巧,但我不确定它在这种情况下是否有帮助,因为您无法显示PDF的一部分。您可以尝试上面的一些ini设置,它们可能会有所帮助,但迟早您会遇到限制。下载速度更快,因为浏览器在接收数据包时只是将输出转储到临时或部分文件中。我发现问题不在于PHP,而在于我用来测试的浏览器。在MicrosoftEdge上,显然内联加载PDF文件需要两个请求,如果两个请求都提供了PDF数据,则无法处理大文件。