2

我有一个长时间运行的 PHP 脚本,在 IIS 上运行(通过 WebMatrix 3 安装的 IISEXpress。

在前 15 分钟内,它运行良好,查询亚马逊产品广告 API,一次一行地将输出刷新到浏览器以显示其进度。然后它停止显示任何进展。

我很确定问题不在于脚本或 Amazon API,因为它每次都会达到不同的进度点,但总是在 15 分钟时停止(我在脚本中内置了一个时间,并且经过的时间刷新到浏览器中的页面)。

为了防止脚本在 30 秒后因错误而中止,我设置了:

set_time_limit(36000); in the script

我听说 IIS 可能在 15 分钟后出现 CGI 超时,并尝试将 CGI 行添加到 ApplicationHostConfig 以覆盖任何默认超时。没有效果。

   <location path="myAmazonScript">
        <system.webServer>
            <cgi createCGIWithNewConsole="true" createProcessAsUser="false" timeout="00:20:00" />
            <handlers>
                <remove name="PHP54_via_FastCGI" />
                <add name="PHP via FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\iis express\PHP\v5.4\php-cgi.exe" responseBufferLimit="0" resourceType="Either" />
            </handlers>
        </system.webServer>

(如果您想知道,我将 ResponseBufferLimit 设置为 0 以强制刷新。)

在 system.webserver 部分的其他地方,我们有:

<cgi />
<fastCgi>
    <application fullPath="C:\Program Files (x86)\iis express\PHP\v5.4\php-cgi.exe" monitorChangesTo="php.ini" activityTimeout="600" requestTimeout="600" instanceMaxRequests="10000">
        <environmentVariables>
            <environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
            <environmentVariable name="PHPRC" value="C:\Program Files (x86)\iis express\PHP\v5.4" />
        </environmentVariables>
    </application>
</fastCgi>

不存在其他“超时”值。

顺便说一句,我无法运行 appcmd 或通过 GUI 访问 IIS 设置,大概是因为是 IISExpress。但 applicationhost.config 似乎工作正常。

非常感谢任何建议。

乔纳森

4

1 回答 1

0

服务器上的 IIS 管理器允许您管理 FastCGI 设置。activityTimeout (600) 和 idleTimeout (300) 的默认值加起来正好是 15 分钟。

我给他们每个人都加了一个零,我的 50 分钟脚本就像一个魅力一样通过了。

于 2016-02-09T13:21:06.180 回答