PHP - 加载页面后填写表格内容

问题描述:

我已经创建了一个PHP文件,它被设置为读取本地文本文件的内容,解析为一个数组,然后在主页面中填充一个表格。但是,即使只有53行的文本文件在显示任何内容之前大约需要10秒才能加载页面。PHP - 加载页面后填写表格内容

据我所知,这是一个限制,其中服务器需要创建整个HTML文件之前发送到客户端,并且这一代需要时间取决于要生成的内容的大小,这意味着这10秒可能会增加有更多的线路要处理。最终产品将有超过500条线路进行处理,因此这需要几分钟时间才能生成,然后发送给客户端。

我想知道是否可以绕过这个,发送客户端一个小的HTML文件,拿着一个空表,然后开始填充和使用PHP填充这张表,但我不确定如何去做这件事。我是否会将一个include包含到一个单独的php文件中,该文件将调用生成代码,或者让服务器将内容一次一行地“流”到内容中?

相关页面:http://zionfox.net/cards.php。目前的加载时间大约需要7-10秒,我想通过加载核心表来减少这个时间,然后显示源表生成的表格行。

编辑:也有一个更大的图像的原因:当放大移动设备时,我宁愿图像与字体一样清脆和尖锐。我尝试使用实际大小的图像(20px),放大时几乎不可读。我意识到.png可能不是最好的格式,但这是我第一次使用file_put_contents(),但我并不完全确定源代码文件的图像,也不确保图像保持透明度。

编辑:编辑:该文件的来源是:http://zionfox.net/cards.php.txt - 请原谅代码的sc,,它仍然在进行中,并且在整理代码之前我想先让它工作。

使用explode()将文件拆分为一个由字符分隔的数组。然后使用更多explode() s将这些数组中的每个数组分割成更多数组,然后处理该数组的每个部分以查看条件是否匹配,并根据这些值返回正确的结果,包括从外部来源提取图像(如果我不' t已经有了图像。这是在for循环底部创建一个新的表格行然后echo,然后它重复下一行的过程。


由于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版本。

您可以使用flush 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(); 
+0

这似乎是一个有趣的方法,我将不得不看看它是如何工作的,以及它是否可以轻松实现到我当前的代码中。谢谢! – 2014-10-05 16:32:59

+0

没问题,让我知道它是如何工作的。 – tenhsor 2014-10-05 16:34:52

+0

不幸的是,这似乎并没有工作。我创建了一个新文件来测试这个过程,但它仍然希望等到文件完成后才显示任何数据。测试网址:http://zionfox.net/test.php - 来源:http://zionfox.net/test.php.txt – 2014-10-05 17:19:35

如果解析该文件很简单(意味着不涉及复杂的逻辑),则不需要10秒来处理。检查你是否可以以某种方式优化你的代码或在这里显示。

如果你的内容不经常改变,你可以考虑的一件事就是缓存。这意味着您只需计算一次表格并重新使用这些计算出的值并将其发布回浏览器。

参见:http://www.slideshare.net/anisniit/caching-new了解更多信息。

+0

的源文件是:http://zionfox.net/cards.php.txt - 请原谅代码的臃肿,它仍然是WIP,我希望在整理代码之前先让它工作。 该文件被拆分成一个数组,使用'explode()'分隔字符。然后使用更多'explode()'将这些数组分割成更多数组,然后处理该数组的每个部分以查看条件是否匹配,并根据这些值返回正确的结果,包括从外部源拉取图像如果我还没有图像。 – 2014-10-05 16:23:53