我创建了一个 PHP 文件,该文件设置为读取本地文本文件的内容,解析为一个数组,然后在主页中填充一个表。然而,即使这个文本文件只有 53 行,也需要大约 10 秒来加载页面,然后才会显示任何内容。
我知道这是一个限制,服务器需要在将其发送给客户端之前创建整个 html 文件,并且这一代需要时间取决于要生成的内容的大小,这意味着这 10 秒可能会随着更多行而增加过程。最终产品将有超过 500 行要处理,因此这将需要几分钟来生成,然后发送给客户端。
我想知道我是否可以绕过这个,向客户端发送一个包含一个空表的小 html 文件,然后开始使用 PHP 填充和填充这个表,但我不确定如何去做。我是否会将一个包含调用到一个单独的 php 文件中,该文件将调用生成代码,或者让服务器一次“流式传输”一个表格行的内容?
有问题的页面是:http: //zionfox.net/cards.php。当前的加载时间大约需要 7-10 秒,我想通过仅加载核心表来减少这一时间,然后显示源生成的表行。
编辑:更大的图像也是有原因的:在移动设备上放大时,我希望图像像旁边的字体一样清晰锐利。我尝试使用实际大小的图像(20px),放大后它们变得几乎不可读。我意识到 .png 可能不是最好的格式,但这是我第一次使用file_put_contents()
,我不完全确定源文件的图像,也不能确保图像保持透明度。
编辑:编辑:文件的来源是:http: //zionfox.net/cards.php.txt - 请原谅代码的邋遢,它仍在大量工作中,我想在整理之前先让它工作代码。
该文件被分割成一个数组,由字符分隔,使用explode()
. 然后使用更多 s 将这些数组中的每一个拆分为进一步的数组explode()
,然后处理该数组的每个部分以查看条件是否匹配,并根据值返回正确的结果,包括如果我不从外部来源提取图像已经有了图像。这一切都echo
在 for 循环的底部被删除以创建一个新的表行,然后它为下一行重复该过程。
感谢 Tenhsor,解决了这个问题:
$handle = fopen($pathToFile, "r");
if(ob_get_level() == 0) ob_start();
if($handle) {
while(($line = fgets($handle)) !== false) {
echo $row . "<br />";
//The code you want to process
ob_flush();
flush();
}
}
ob_end_flush();
fclose($handle);
在他们的回复中找到了完整的解决方案。
我还想补充一下,仅此代码并不能解决我的问题。我正在运行 IIS 7.5,必须发出命令才能使其正常工作。该命令取决于您的 PHP 版本,您应该可以通过 IIS 找到该版本。给 cmd.exe 的命令是:
%windir%\system32\inetsrv\appcmd.exe set config /section:handlers "/[name='PHP53_via_FastCGI':ResponseBufferLimit:0"
PHP53_via_FastCGI
PHP 的名称和版本在哪里。