繁体   English   中英

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

[英]PHP script stops running with 503 service unavailable

我有自己的 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 超时变量限制(300)。 但是我的主机提供商对此持怀疑态度......

  4. 服务器在 PHP 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);
}

我认为在服务器上使用mod_fastcgi或equals。

看看这篇老帖子http://www.binarytides.com/php-set-time-limit/

例如,mod_fastcgi有一个名为“-idle-timeout”的选项,它控制脚本的空闲时间。 因此,如果脚本没有向fastcgi处理程序输出任何内容,那么fastcgi会终止它。 设置有点像这样:

Apache <-> mod_fastcgi <-> php processes

您应该使用队列和crontab,队列每分钟处理一次。

希望这可以帮助。

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

我遇到过类似的问题。

这可能对其他人有帮助,而不是对给定问题的直接回答。

class 中的 2 个方法互相调用。

function method1(){
     method2();
}

function method2(){
    method1();
}

它比这个例子复杂一点

在这种情况下期待不同的错误......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM