草庐IT

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

coder 2024-04-09 原文

我遇到了以下问题:

  1. 我正在运行大内存进程,但已将内存负载分成较小的 block ,因此没有 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

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

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

编辑:

上传超时图像,这就是要求下载 .php 文件的原因。


编辑 2:

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

  1. 我有一个包含类层次结构对象的 PHP 文件,它将开始从每个类层次结构执行 Function1()。
  2. 我有类(class)文件。
  3. 首先,假设执行 Function1(),其中包含以 block 的形式创建 XML 文件的逻辑。
  4. 其次,假设执行 Function2(),它将显示 Function1() 生成的输出。

所有都是以类层次结构的方式完成的。因此,在 Function1() 执行之前,我无法在其间终止执行。之后将调用 Function2()。

编辑 3:

这是 specially for @hakre

你问了一些交叉问题,我同意一些观点,但让我更详细地描述这个问题。

  1. 首先,我一次加载大约 100+ MB 大小的 XML 文件,这就是为什么我在本地设置中的内存挂起并停止机器上的所有内容,并且 CPU 时间利用了它的大部分资源。

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

  3. 现在我的后端进程没有运行 CPU 或内存问题,但问题是浏览器超时。我什至尝试过 cURL,但根据我当前的结构,由于我的类层次结构问题,它似乎确实适合。我在层次结构中有一组类,它们都首先执行它们的 Process 函数,然后它们都执行它们的 Output 函数。因此,除非并且直到流程功能得到执行,输出功能才出现在图片中,这就是浏览器显示超时的原因。

  4. 我什至关注了 instructions suggested by @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 

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

免责声明:此问题的答案是根据所选答案的第一个小成功来选择的。 @Hakre 的解决方案在出现此类问题时也是可行的。但现在没有答案解决我的问题,但一点点。 Hakre 的回答也更详细,以防人们发现有关此类问题的更多详细信息。

最佳答案

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

<?php
set_time_limit(0);
error_reporting(E_ALL);
ob_implicit_flush(TRUE);
ob_end_flush();

我可以根据经验告诉您,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();

在你的执行循环中

关于php - 服务器进程仍在运行时浏览器显示超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17851868/

有关php - 服务器进程仍在运行时浏览器显示超时的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  5. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  6. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  7. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  8. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  9. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  10. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

随机推荐