PHP会在10秒后关闭连接,而不会回显数据

PHP会在10秒后关闭连接,而不会回显数据,php,Php,我有一个PHP网页,可以生成统计数据,在将它们发送到浏览器之前,需要大约15秒的时间来生成它们 我遇到的问题是,浏览器最终加载的是一个空白页面。很遗憾,我没有访问错误日志文件的权限 但是我想,如果我开始在foreach循环中发送数据,它会像这样消耗大部分的生成时间 echo ' '; 连接不会终止,页面将加载 首先,我认为这可能是内存限制或最大执行时间的问题,所以我增加了这两个,没有任何运气。但这对我来说也很奇怪,因为无论我是否发送echo',达到最大执行时间都会导致一个空白页面 我不知道是否

我有一个PHP网页,可以生成统计数据,在将它们发送到浏览器之前,需要大约15秒的时间来生成它们

我遇到的问题是,浏览器最终加载的是一个空白页面。很遗憾,我没有访问错误日志文件的权限

但是我想,如果我开始在foreach循环中发送数据,它会像这样消耗大部分的生成时间

echo ' ';
连接不会终止,页面将加载

首先,我认为这可能是内存限制或最大执行时间的问题,所以我增加了这两个,没有任何运气。但这对我来说也很奇怪,因为无论我是否发送
echo'
,达到最大执行时间都会导致一个空白页面

我不知道是否还有其他PHP设置会导致连接在10秒后终止,而不发送数据

编辑

这一页并非完全空白。以下是正在发送的数据:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta name="author" content="Gerd Grützmacher">
  <meta name="robots" content="index,follow">
  <meta http-equiv="Language" content="de">  
  <link rel="icon" href="/favicon.png" type="image/png">

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

  <!--[if (gte IE 5.9)]><!-->
  <link rel="stylesheet" type="text/css" href="css/gruppenunterkuenfte-min.css" />
  <!--<![endif]-->

  <!--[if IE 6]>
  <style type="text/css" media="screen, projection">
       @import url(css/ie6.css);
  </style>
  <![endif]-->

  <!--[if gte IE 5.9]><!-->
    <script type="text/javascript" src="scripts.js"></script>
  <!--<![endif]-->

根据目前的信息,我认为浏览器可能由于不活动而导致连接超时


当您输出延迟的单个字符时(
,在您的情况下),尝试在其后面放置一个
flush()
调用,尝试通过网络刷新缓冲区,并希望生成一些活动。如果这不起作用,也许可以尝试发送一个更大的字符串;在输出缓冲区完全刷新之前,您可能需要填充它。

不确定代码的布局,但如果要循环任何结果以显示它们,请尝试在每个循环中回显它们,或在每个循环中回显某些内容


看不到代码,很难判断。

在执行任何操作之前,请通过启用错误报告来检查是否没有发生错误:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

很遗憾,我没有访问错误日志文件的权限

呃。。。为什么不将错误日志指向您有权访问的文件/位置?只需在脚本开始时使用ini_set设置它,即

ini_set('log_errors', 1);
ini_set('error_log', '/path/to/yourlog.log');

您还可以根据需要更改“错误报告”的值。

是否尝试在本地计算机上调试代码?我在ISP的服务器上设置错误消息时遇到一些问题。他们为所有客户机管理并隐藏它们——认为这样可以防止客户看到难看的警告或错误(例如,在php更新或类似情况之后)

  • 如果没有看到任何错误,请尝试在本地主机上测试它
  • 如果您在浏览器中没有看到任何连接超时(至少我的firefox打印了它),那么服务器和客户端之间不会导致超时

  • 我建议您试着调试代码——试着找出为什么输出会在包含JS文件时完全停止。脚本是否总是停在同一行上?

    确保没有发送控制字符。他们将终止HTML输出。您可能要尝试:

    echo preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/','',$output);
    

    这将输出包括空格(制表符、回车符、换行符)在内的所有字符。

    您是否尝试在脚本开头感测任何标题(内容类型或类似内容)?

    这是我的2美分:

    首先,我要确保所有类型的缓冲都已关闭。一位绅士曾经提供过这样的代码:

    @apache_setenv('no-gzip', 1);
    @ini_set('zlib.output_compression', 0);
    @ini_set('implicit_flush', 1);
    for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
    ob_implicit_flush(1);
    
    @apache_setenv('no-gzip',1);
    @ini_集('zlib.output_compression',0);
    @ini_集(“隐式_刷新”,1);
    对于($i=0;$i

    之后,我建议您发送一个
    echo'经过一些时间间隔。例如,如果您的代码有一个循环,根据每次迭代所需的时间,在每10次迭代或类似的情况下发送一个回音。这样,您就不会浪费时间发送回音,页面也会保持活动状态。

    如何向浏览器发送两个组件,一个ajax块和一个iframe-隐藏的iframe可能是。。使用iframe的
    元刷新
    保持刷新,并使用ajax块等待php代码输出。

    您的代码可能正在破坏Apache,或者php正在崩溃。在这两种情况下,都无法将错误消息发送回浏览器。您是否在家用计算机上使用相同版本的Apache和PHP进行测试?同样的操作系统

    尝试睡眠(10),而不是在循环中回显“”。如果页面在10秒后没有变为空白,您就会知道这不是超时问题


    看看你在foreach循环中做了什么。有上百种东西可能会使Apache、PHP或两者都崩溃。尤其是在处理大量数据的情况下。

    您是在php.ini中设置最大执行时间还是使用ini\u set()。我这样问是因为后者可能不可靠,这取决于环境。是直接访问服务器还是有(服务器或客户端)代理?我们的客户代理服务器经常出现问题。一个问题是,由于响应时间过长,其中一些服务器会终止连接。您是否有显示错误?您在syslog或webservice日志中没有任何条目?尝试在源代码中放入一些调试。。。也许你应该使用Zend_Log。它到底是在发送头吗?flush()没有帮助。我猜是因为输出缓冲区是空的,如果我不做任何回显的话。@JochenJung:那就做回显吧。我同意jay.lee的观点,可能是因为服务器没有应答,所以浏览器超时。也可以尝试不同的浏览器,因为它们有不同的行为。Chrome和Firefox都会在10秒后停止加载。@JochenJung@MainMa关闭连接的可能是Apache,而不是PHP。也许这是apache.conf中的一个设置?大多数浏览器都会显示“服务器响应时间过长”消息。因此,如果某个东西超时了,我认为不是浏览器。不,我需要计算循环中的内容,并在完成循环之前得到结果。我只是在php.ini文件中设置了这两个。但它不会带来更多的错误。页面在几秒钟后停止加载。如果您没有看到
    @apache_setenv('no-gzip', 1);
    @ini_set('zlib.output_compression', 0);
    @ini_set('implicit_flush', 1);
    for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
    ob_implicit_flush(1);