php执行超时时间 命令行,如何在执行长时间运行的PHP脚本时解决执行超时错误?...

您可以在数据库中添加列(或辅助表),并将所有地址标记为最初“待处理”。

然后你的脚本可以:

- SELECT the number of worked addresses and total addresses

- display a progress bar

- SELECT the lowest 100, or 50, or N addresses yet to be worked

- send the emails and mark them worked

- issue a javascript to refresh itself.然后客户端将看到一个进度条不断前进的页面,并且永远不会超时(只要“N”足够小)。

您也可以在AJAX中执行此操作,但这可能有点过分。

此外,你可以采用一些技巧(如果你还没有)加快操作。如果电子邮件正文相同,一种可能性就是“合并”几个地址作为密件抄送:这样你就可以在一次通话中发送几条消息。注意不要超过任何密件抄送:限制您的ISP可能会强制执行。此策略使用ISP端的更多资源,因此请与它们一起检查。

另一种可能性(可以一起使用)是发送按域排序的电子邮件。如果可能,多个邮件服务器尝试在一个连接中向同一服务器发送电子邮件以节省资源和时间。如果您将一组电子邮件全部发送到同一个域,则可以使服务器更容易。

在最后一种情况下,你会发送SELECT这样的电子邮件:

SELECT * FROM addresses

WHERE (worked=0 AND active = 1)

ORDER BY SUBSTRING_INDEX(email, '@', -1)

LIMIT 20;然后(使用mysql函数的例子 - PDO更好),

while($tuple = mysql_fetch_assoc($exec))

{

if (send_mail_to(...))

$sent[] = $tuple['id'];

else $failed[] = $tuple['id'];

}

// Now mark both SENT and FAILED as worked

$sentm = implode(',', $sent);

$failm = implode(',', $failed);

// UPDATE addresses SET worked = 1 WHERE id IN ($sentm,$failm);

// UPDATE addresses SET active = 0 WHERE id IN ($failm);如果您在PHP会话中保存了开始时间,您甚至可以显示一个漂亮的条形图表,例如

+--------------------+

|######## |

+--------------------+

40% processed

38% delivered

2% failed

Expected time remaining 5 min 17"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值