PHP脚本停止运行,503服务不可用

时间:2016-12-05 11:39:55

标签: php execution

我有自己的PHP脚本来发送简报。它工作得很好。最近,我的托管服务提供商指出我要尊重的配额:30邮件/分钟。因此,在每封邮件发送之间,我插入sleep(2);

由于该更改,在5分钟(300秒)后,脚本停止并返回:

  

服务不可用

     

由于维护停机或容量问题,服务器暂时无法为您的请求提供服务。请稍后再试。   此外,尝试使用ErrorDocument处理请求时遇到503 Service Unavailable错误。

四个观察结果。

  1. 在我的脚本开头,我把这两行:

    ignore_user_abort(true);
    set_time_limit(0);
    

    所以,问题不是来自max_execution_time变量(我验证:它确实已被修改)。

  2. 该脚本在localhost上正常工作,其中PHP ini变量比我的Web主机更受限制。因此,问题不在于memory_limit变量。

  3. 我认为它可能是Apache Timeout变量限制(300)。但我的主机提供商对此持怀疑态度......

  4. 服务器适用于PHP 5.5。

  5. 导致这种情况的原因是什么?

    之前的脚本(适用于PHPMailer):

    // all email addresses
    while ($row = $result->fetch_array())
    {
        // ...
    
        if ($mail->send())
        {
            echo "success : " . $row["mail"] . "<br/>";
        }
        else
        {
            echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>";
        }
    }
    

    之后:

    // all email addresses
    while ($row = $result->fetch_array())
    {
        ...
    
        if ($mail->send())
        {
            echo "success : " . $row["mail"] . "<br/>";
        }
        else
        {
            echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>";
        }
    
        sleep(2);
    }
    

1 个答案:

答案 0 :(得分:0)

这可能是很多事情,甚至是文件权限。我会首先撤消您的更改,看看它是否再次运行。如果没有,那么你知道它不是导致问题的sleep()命令。如果是sleep命令,则问题可能与等待php响应时的超时有关。尝试睡眠时间为.1秒,只是为了测试它是否有效。