如何解决:FastCGI 进程超出配置的请求超时错误:在 IIS 7.5 上

Bio*_*per 4 php iis

我的 PHP 脚本在我的服务器 IIS 7.5 上执行一些程序
需要大约 10 分钟的时间来执行但在浏览器中出现以上错误。
如何解决这个问题。

错误:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

C:\Windows\System32\inetsrv\config\ applicationHost.config文件设置 fast-cgi

<fastCgi>
<application  
fullPath="C:\php\php-cgi.exe" activityTimeout = "3600" requestTimeout = "300" />
</fastCgi>
Run Code Online (Sandbox Code Playgroud)

dat*_*age 5

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

通常,为了防止连接卡在打开和等待中(如果 php 进程发生崩溃),Web 服务器只会等待一定的时间让 PHP 进程返回结果(通常为 30-60 秒)。

在您的配置中,您有:

requestTimeout = "300"
Run Code Online (Sandbox Code Playgroud)

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

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

因此,当您的 Web 应用程序有这样一个长时间运行的作业时,运行它的最佳方式是通过控制台或作业队列。


zet*_*eta 5

我从这个来源找到了另一个设置,它帮助我解决了我遇到的同样问题。复制粘贴:

打开服务器管理器

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

  • 双击 FastCGI 设置
  • 打开那里列出的 PHP.EXE
  • 监视对文件 php.ini 的更改
  • 活动超时默认为 60 秒 - 更改为 600 秒或其他