Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-加载页面后填写表格内容_Php_Html_Iis 7.5_Page Load Time_Dynamic Pages - Fatal编程技术网

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

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

我创建了一个PHP文件,该文件被设置为读取本地文本文件的内容,解析为数组,然后在主页中填充一个表。然而,即使这个文本文件只有53行,在显示任何内容之前加载页面也需要大约10秒钟

我知道这是一个限制,服务器需要在将整个html文件发送到客户端之前创建它,这一生成需要时间,具体取决于要生成的内容的大小,这意味着这10秒可能会随着要处理的行数的增加而增加。最终产品将有500多条生产线需要处理,因此需要几分钟才能生成,然后发送给客户

我想知道是否可以绕过这个问题,向客户端发送一个包含一个空表的小html文件,然后开始使用PHP填充这个表,但我不确定该如何操作。我会调用一个单独的php文件的include来调用生成代码,还是让服务器一次“流式”处理一行表中的内容

有问题的页面是:。当前的加载时间大约需要7-10秒,我想通过只加载核心表,然后显示源代码生成的表行来减少这一时间

编辑:放大图像也是有原因的:在移动设备上放大时,我希望图像像旁边的字体一样清晰。我尝试了实际大小的图像(20px),放大后几乎看不懂。我意识到.png可能不是最好的使用格式,但这是我第一次使用
file\u put\u contents()
,我不能完全确定源文件的图像,也不能确保图像保持透明

编辑:编辑:该文件的源代码是:-请原谅代码的不完整性,它仍在进行大量的工作,我想在整理代码之前先让它工作

使用
explode()
将文件拆分为一个由字符分隔的数组。然后使用more
explode()
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()
将文件拆分为一个由字符分隔的数组。然后,使用more
explode()
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();