Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大型对象的IIS 7和PHP响应超时_Php_Iis_Iis 7_Windows Server 2008_Fastcgi - Fatal编程技术网

大型对象的IIS 7和PHP响应超时

大型对象的IIS 7和PHP响应超时,php,iis,iis-7,windows-server-2008,fastcgi,Php,Iis,Iis 7,Windows Server 2008,Fastcgi,我和我的同事在这个问题上被难住了好几个星期。我们有一个托管在IIS7环境中的PHP5.3Web应用程序。应用程序从SQL Server 2012数据库后端获取结果集,并将其作为JSON对象发送回客户端 当发出的请求导致对象大小超过约4MB时,就会出现问题。因此,每次响应超过此大小时,连接都会重置并导致错误。我已经通过使用Curl在本地服务器上确认了这一点,这非常有用。使用这些工具,当我在承载应用程序的IIS web服务器上运行请求时,它会成功地完成4MB的响应,并出现Curl(56)错误“Con

我和我的同事在这个问题上被难住了好几个星期。我们有一个托管在IIS7环境中的PHP5.3Web应用程序。应用程序从SQL Server 2012数据库后端获取结果集,并将其作为JSON对象发送回客户端

当发出的请求导致对象大小超过约4MB时,就会出现问题。因此,每次响应超过此大小时,连接都会重置并导致错误。我已经通过使用Curl在本地服务器上确认了这一点,这非常有用。使用这些工具,当我在承载应用程序的IIS web服务器上运行请求时,它会成功地完成<4MB的响应,但无法完成>4MB的响应,并出现Curl(56)错误“Connection was reset”

一些补充说明:

  • 直接针对数据库运行的查询只需大约20秒即可完成,因此数据库性能不是问题

  • 在本地桌面开发环境中,我们在Apache之上运行Zend框架;但这一问题在任何一个国家都无法重现。在web服务器上失败的同一个>4MB响应对象在向本地Apache托管环境发出相同请求时成功完成

我梳理了web服务器的IIS7配置设置,并做了以下更改

  • 我已将允许的最大内容长度和URL长度从默认值增加到30MB
  • PHP、FastCGI和IIS连接超时设置分别设置为5分钟。我已经运行了一些小的查询,这些查询需要一分钟才能完成,但只要小于4MB,就会返回有效的响应
我开始读到IIS7的响应缓冲缓存机制可能也会影响PHP应用程序的性能,但我仍然对这个特性很熟悉。如果有人在过去有过类似的问题,或者可以提供一些关于问题可能是什么的见解,我是开放的。此时,我不确定IIS 7 web服务器上出现此问题的原因是什么。

是否使用或PHP内置函数进行编码?检查PHP.ini中的PHP内存限制设置

还要检查PHP错误报告和错误日志设置(PHP.ini中的error_reporting和error_log指令)

我猜PHP会输出一些东西,或者悄悄地终止脚本执行,而不是重置HTTP连接

查看web服务器上的日志以了解更多详细信息:

  • 事件查看器>Windows日志>应用程序/系统>查看PHP FastCGI工作进程是否崩溃

  • IIS日志文件>确定失败HTTP请求的响应代码和状态

  • 使用IIS中的“失败请求跟踪规则”获取失败请求的更多详细信息

  • 最后,使用进程监视器(ProcMon),过滤它以仅显示应用程序池(w3wp.exe)和PHP/FastCGI进程,以检查给定时刻的PHP和IIS活动


我遇到了类似的问题,curl请求花费了10分钟以上,出现了以下错误

Curl错误:SSL读取:错误:00000000:lib(0):func(0):原因(0),错误号10054

根本原因是默认情况下,如果请求的服务器没有响应,curl将在5分钟后终止请求。我尝试使用CURLOPT_TIMEOUT=>3600来增加执行时间,但出于某种原因,curl忽略了这个设置

解决方案: 对我来说,有效的方法是在curl选项中设置keep-alive标志以及timeout标志CURLOPT_-TCP\u-KEEPALIVE=>1

请不要将问题的答案放在OP中。将答案作为答案发布,并按此标记。