2014-04-18 70 views
1

我的PHP脚本在我的服务器上执行一些程序IIS 7.5
花费大约10分钟时间来执行,但在浏览器中出现错误。
如何解决此问题。
如何解决:FastCGI进程超出已配置的请求超时错误:在IIS 7.5上

错误:

HTTP Error 500.0 - Internal Server Error 
C:\php\php-cgi.exe - The FastCGI process exceeded configured request timeout 

Module FastCgiModule 
Notification ExecuteRequestHandler 
Handler FastCGI 
Error Code 0x80070102 

php.ini设置:

fastcgi.impersonate = 1 
fastcgi.logging = 0 
cgi.fix_pathinfo=1 
cgi.force_redirect = 0 

max_execution_time = 0 
upload_max_filesize = 20M 
memory_limit = 128M 
post_max_size = 30M 

C:\ WINDOWS \ SYSTEM32 \ INETSRV \设置\ 的applicationHost.config用于快速文件设置-cgi

<fastCgi> 
<application 
fullPath="C:\php\php-cgi.exe" activityTimeout = "3600" requestTimeout = "300" /> 
</fastCgi> 
+0

那么你是如何解决这个问题?你同时增加(activityTimeout和将requestTimeout)或只是其中之一? – utdev

回答

2

这是对正在发生的事情的快速解释。当您使用PHP的CGI/FCGI配置时。 Web服务器(在这种情况下是IIS)将需要php处理的请求路由到PHP进程(与Web服务器分开运行)。

一般来说,为防止连接打开并等待(如果php进程发生崩溃),Web服务器将只等待PHP进程返回结果(通常为30-60秒)的一段时间。

在您的配置你有这样的:

requestTimeout = "300" 

300秒= 5分钟。 IIS将取消​​请求,因为您的请求需要10分钟才能完成。简单的修复,增加超过600或更大的超时。

现在,使用http请求运行脚本10分钟不是一个好的设计模式。通常,http对于短期请求效果最好。原因是超时可能存在于进程的任何部分(服务器,代理或客户端),并且脚本可能意外中断。

所以,当你有一个像这样长时间运行的web应用程序时,运行它的最好方法是通过控制台或作业队列。

+0

我改变了requestTimeout =“1000”,脚本花了5.5分钟运行,但是同样的错误,我在运行之前重启了服务器,看起来如果我的用户希望更大的文件被我的应用程序处理,如果我使用控制台或作业que,但我不知道如何做到这一点 – BioDeveloper

+0

你有任何错误记录吗?你之前没有提到文件上传,在w上可能还有别的东西ork以及。 – datasage

+0

它需要处理文本文件。我通过php调用perl脚本并运行perl以将文件发送给用户。文件上传正常(我得到那些在我的根文件夹中)这意味着文件大小或类型没有错误。 – BioDeveloper

3

还有一个设置,我发现从这个source,帮助我与我有同样的问题。 复制和粘贴:

打开服务器管理器

在服务器级(不是默认网站)

  • 双击FastCGI设置
  • 开放PHP.EXE上市有
  • 监视器更改文件php.ini
  • 活动超时默认为60s - 更改为600s或其他
0

这可以通过调整fast-cgi配置来解决。 Goto “C:\ Windows \ System32 \ inetsrv \”并编辑“fcgiext。INI”文件

[PHP] 
ExePath=C:\xampp\php\php-cgi.exe 
MonitorChangesTo=C:\xampp\php\php.ini 
ActivityTimeout=3600 
IdleTimeout=3600 
RequestTimeout=3600 

确保放置ActivityTimeout,的IdleTimeout [PHP]部分内&将requestTimeout如上图所示。