PHP-加载页面后填写表格内容
我创建了一个PHP文件,该文件被设置为读取本地文本文件的内容,解析为数组,然后在主页中填充一个表。然而,即使这个文本文件只有53行,在显示任何内容之前加载页面也需要大约10秒钟 我知道这是一个限制,服务器需要在将整个html文件发送到客户端之前创建它,这一生成需要时间,具体取决于要生成的内容的大小,这意味着这10秒可能会随着要处理的行数的增加而增加。最终产品将有500多条生产线需要处理,因此需要几分钟才能生成,然后发送给客户 我想知道是否可以绕过这个问题,向客户端发送一个包含一个空表的小html文件,然后开始使用PHP填充这个表,但我不确定该如何操作。我会调用一个单独的php文件的include来调用生成代码,还是让服务器一次“流式”处理一行表中的内容 有问题的页面是:。当前的加载时间大约需要7-10秒,我想通过只加载核心表,然后显示源代码生成的表行来减少这一时间 编辑:放大图像也是有原因的:在移动设备上放大时,我希望图像像旁边的字体一样清晰。我尝试了实际大小的图像(20px),放大后几乎看不懂。我意识到.png可能不是最好的使用格式,但这是我第一次使用PHP-加载页面后填写表格内容,php,html,iis-7.5,page-load-time,dynamic-pages,Php,Html,Iis 7.5,Page Load Time,Dynamic Pages,我创建了一个PHP文件,该文件被设置为读取本地文本文件的内容,解析为数组,然后在主页中填充一个表。然而,即使这个文本文件只有53行,在显示任何内容之前加载页面也需要大约10秒钟 我知道这是一个限制,服务器需要在将整个html文件发送到客户端之前创建它,这一生成需要时间,具体取决于要生成的内容的大小,这意味着这10秒可能会随着要处理的行数的增加而增加。最终产品将有500多条生产线需要处理,因此需要几分钟才能生成,然后发送给客户 我想知道是否可以绕过这个问题,向客户端发送一个包含一个空表的小html
file\u put\u contents()
,我不能完全确定源文件的图像,也不能确保图像保持透明
编辑:编辑:该文件的源代码是:-请原谅代码的不完整性,它仍在进行大量的工作,我想在整理代码之前先让它工作
使用explode()
将文件拆分为一个由字符分隔的数组。然后使用moreexplode()
s将这些数组中的每一个拆分为更多的数组,然后处理此数组的每个部分,以查看条件是否匹配,并根据值返回正确的结果,包括从外部源提取图像(如果我还没有图像)。然后,在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);
其中,
PHP53\u via_FastCGI
是您的PHP的名称和版本。如果文件的解析是简单的(意味着不涉及复杂的逻辑),则处理该文件不会花费10秒。检查您是否可以以某种方式优化代码或在此处显示它
<>如果你的内容不经常改变,你可以考虑的一件事就是缓存。这意味着您只需计算一次表,然后重用这些计算值,并将其发布回浏览器
请参阅:了解更多信息。您可以使用php函数向客户端发送信息块。
例如,如果使用循环显示html表,可以执行以下操作:
file = @fopen('path/to/my/file', 'rb');
$buffer = 1024 * 8;
echo '<table>';
while (!feof($file)) {
echo '<tr><td>'.fread($file, $buffer).'</td></tr>';
ob_flush();
flush();
}
echo '</table>';
ob_end_flush();
file=@fopen('path/to/my/file','rb');
$buffer=1024*8;
回声';
而(!feof($file)){
echo'.fread($file,$buffer)。'';
ob_flush();
冲洗();
}
回声';
ob_end_flush();
文件的源代码是:-请原谅代码的不整洁,它仍然有大量的在制品,我想在整理代码之前先让它工作。使用explode()
将文件拆分为一个由字符分隔的数组。然后,使用moreexplode()
s将这些数组中的每一个拆分为更多的数组,然后处理此数组的每个部分,以查看条件是否匹配,并根据值返回正确的结果,包括,如果我还没有图像,则从外部源提取图像。这似乎是一个有趣的方法,我将不得不看看这是如何工作的,以及它是否可以轻松地实现到我当前的代码中。谢谢不幸的是,这似乎不起作用。我创建了一个新文件来测试这个过程,但它仍然希望等到文件完成后再显示任何数据。测试URL:-来源:添加:如果(ob_get_level()==0)ob_start();启动刷新缓冲区。要阅读每一行,请使用fopen和fgets:$contents=fopen(“C:\\Website\\zionfox\\mtg\\magic_cards.txt”,“r”);if($contents){while($line=fgets(C:\\Website\\zionfox\\mtg\\magic_cards.txt))!==false){//打印行ob_flush();flush();}}}fclose($handle);这些变化似乎没有什么不同。查一下消息来源,看看我有没有做错什么。尝试删除sleep(1)功能,可能它阻塞了刷新缓冲区。
file = @fopen('path/to/my/file', 'rb');
$buffer = 1024 * 8;
echo '<table>';
while (!feof($file)) {
echo '<tr><td>'.fread($file, $buffer).'</td></tr>';
ob_flush();
flush();
}
echo '</table>';
ob_end_flush();