有一个运行几分钟的 php 脚本。它会在服务器上创建大量(最多 10000 个)小(2-20K)文件。
由于某种原因,大约 90 秒后,我总是收到 500 内部服务器错误。我认为这可能是 php.ini 的问题,所以我在那里编辑了一些值:
max_execution_time = 1000
max_input_time = 1000
default_socket_timeout = 1000
memory_limit = 400M
post_max_size = 100M
file_uploads = On
upload_max_filesize = 100M
我还使用 phpinfo() 检查了这些新设置是否发生,并且发现它们确实生效了。
为了让我的脚本正常工作,我还可以做什么/改变什么?
PHP5.5 Windows Server 2008 R2、SP1、 不幸的是,只有 600 MB 物理内存 error_log 中没有任何内容。
希望拯救其他人的头发(我在这根头发上拔掉了自己的大部分头发)
解决方案是增加 FastCGI 活动超时。
使用 IIS 7 命令行工具 appcmd 修改 IIS 配置 XML 文件。
在管理员模式下运行cmd。
要检查当前设置,请使用:
%windir%\system32\inetsrv\appcmd list config -section:system.webServer/fastCgi
添加活动超时(假设 CGI 位置为 C:\php\php-cgi.exe):
%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='C:\php\php-cgi.exe'].activityTimeout:600
此输出现在应与此类似:-
<system.webServer>
<fastCgi>
<application fullPath="C:\PHP\php-cgi.exe" activityTimeout="600" instanceMaxRequests="10000">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
</environmentVariables>
</application>
</fastCgi>
</system.webServer>
答案帖子中的命令对我不起作用。
这是正确的:
C:\Windows\System32\inetsrv>appcmd set config -section:system.webServer/fastCgi "-[fullPath='C:\Program Files (x86)\PHP\v5.2\php-cgi.exe'].activityTimeout:3600"
注意双引号。 归功于 http://www.bokko.nl/increase-fastcgi-php-activitytimeout-in-iis7/
问题是 IIS 的 FastCGI 使您的会话超时。这可以通过增加
Activity Timeout
配置设置来解决。
虽然前面的答案使用命令行来更改 IIS7 中的设置,但 IIS 10 有一种在用户界面中更改此设置的方法。在 IIS 的服务器页面下,选择 FastCGI 设置,然后打开顶部条目的编辑菜单。
Activity Timeout
设置位于 Process Model
部分下,默认为 30 秒。