浏览器显示服务器进程仍在运行时超时

Nul*_*ter 4 php browser apache internet-explorer timeout

我有以下问题:

  1. 我正在运行BIG内存进程,但已将内存负载分成较小的块,因此没有CPU超时问题.
  2. 在服务器中,我正在创建大小约为100kb的.xml文件,它们将在100左右创建.
  3. 现在的主要问题是浏览器显示响应超时和下面的IE(只是上方状态栏)显示.php文件下载消息.
  4. 在此期间,后端(服务器端)进程仍在运行,并以增量顺序连续创建.xml文件.所以没问题.

我有以下php.ini配置.

max_execution_time = 10000     ; Maximum execution time of each script, in seconds
max_input_time = 10000 ; Maximum amount of time each script may spend parsing request data
memory_limit = 2000M      ; Maximum amount of memory a script may consume (128MB)
; Maximum allowed size for uploaded files.
upload_max_filesize = 2000M
Run Code Online (Sandbox Code Playgroud)

我在IE上运行我的网站.我在PHP 5.3中使用ZSCE

任何人都可以在这个问题上正确地重定向我吗?

编辑:

上传Time out的图像,这就是为什么要求.php文件下载.

在此输入图像描述


编辑2:

我简要解释一下我的执行流程:

  1. 我有一个包含Class Hierarchies对象的PHP文件,它将从每个类Hierarchy开始执行Function1().
  2. 我有班级档案.
  3. 首先,假设执行Function1(),其中包含以块的形式创建XML文件的逻辑.
  4. 其次,假设执行Function2(),它将显示Function1()生成的输出.

全部以类层次结构方式完成.所以我不能在执行之前终止执行Function1()直到它被执行.之后将调用Function2().

编辑3:

这是专门为@hakre.

当你提出一些交叉问题并且我同意一些观点时,请让我详细描述一下这个问题.

  1. 首先,我一次加载大约100多个MB大小的XML文件,这就是为什么我的本地安装程序中的内存挂起并停止机器上的所有内容并且CPU时间正在利用其最多的资源.

  2. 然后,我将这些大尺寸的XML文件划分为小尺寸(意味着我现在一次加载单个XML文件,然后在使用后卸载它).这使我免于本地设置中的内存过载和CPU问题.

  3. 现在我的后端进程没有运行CPU或内存问题,但问题是浏览器超时.我甚至尝试过cURL,但根据我目前的结构,它确实适合因为我的类层次结构问题.我在层次结构中有一组类,它们首先执行它们的Process函数,然后它们都执行它们的Output函数.因此,除非并且直到处理函数被执行,否则输出函数不会出现在图片中,这就是浏览器显示超时的原因.

  4. 我甚至按照@vortex建议的指示,但收效甚微,但不是我想要的.为什么我无法实现cURl,因为我的流程功能是一次性创建所需的XML文件,因此输出到浏览器需要花费太多时间.由于Process函数花费了很多时间,因此除非并且直到完成,否则无法将输出分配给客户端.

cURL输出:

URL....: myurl 

Code...: 200 (0 redirect(s) in 0 secs) 

Content: text/html Size: -1 (Own: 433) Filetime: -1 

Time...: 60.437 Start @ 60.437 (DNS: 0 Connect: 0.016 Request: 0.016) 

Speed..: Down: 7 (avg.) Up: 0 (avg.) 

Curl...: v7.20.0 
Run Code Online (Sandbox Code Playgroud)

test.txt文件的内容

* About to connect() to mylocalhost port 80 (#0)

*   Trying 127.0.0.1... * connected

* Connected to mylocalhost (127.0.0.1) port 80 (#0)

\> GET myurl HTTP/1.1
Host: mylocalhost
Accept: */*

< HTTP/1.1 200 OK

< Date: Tue, 06 Aug 2013 10:01:36 GMT

< Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/0.9.8o

< X-Powered-By: PHP/5.3.9-ZS5.6.0 ZendServer

< Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/

< Cache-Control: private

< Transfer-Encoding: chunked

< Content-Type: text/html

< 
* Connection #0 to host mylocalhost left intact

* Closing connection #0
Run Code Online (Sandbox Code Playgroud)

免责声明:根据所选答案的第一个小成功选择此问题的答案.当发生这类问题时,来自@Hakre的解决方案也是可行的.但是现在没有任何答案可以解决我的问题.如果有人发现有关此类问题的更多详细信息,Hakre的答案也会更加详细.

vor*_*tex 10

假设您进行了所有服务器端修改,以便躲避服务器超时[我看到上面几乎解释的每一个],为了躲避浏览器超时,你做这样的事情是至关重要的

<?php
set_time_limit(0);
error_reporting(E_ALL);
ob_implicit_flush(TRUE);
ob_end_flush();
Run Code Online (Sandbox Code Playgroud)

我可以从经验告诉你,只要你不时地输出一些内容,Internet Explorer就没有任何问题.我每天运行一个30GB的数据库更新[大约需要2-4个小时]并且opera似乎是唯一忽略内容输出的浏览器.如果你没有设置"ob_implicit_flush",你需要在每个内容之后做一个"ob_flush()".

参考

  1. ob_implicit_flush

  2. 使用ob_flush

如果您不像我之前所写的那样在脚本顶部使用ob_implicit_flush,则需要执行以下操作:

<?php
echo 'dummy text or execution stats';
ob_flush();
Run Code Online (Sandbox Code Playgroud)

在你的执行循环中