我有一个php文件,可以发送电子邮件给我们的客户谁期待它和减轻负载在服务器上,并消除它看起来像垃圾邮件服务器,我们减少到每20秒40封电子邮件。这是通过使用javascript每20秒重新运行页面来完成的。该页面本身从数据库中读取,并获取接下来的40个电子邮件地址,发送它们,然后回收,直到全部发送。然后,电子邮件列表将从一个重复的表重新加载到下一个周期,三个星期后。
下面是由cron作业启动时似乎没有运行的javascript代码
<script language="JavaScript" type="text/javascript">
setTimeout("location.href = \'PT_enrollment.php?sendDate='.$sendDate.'\'",20000); // milliseconds, so 10 seconds = 10000ms
</script>
当我在浏览器上运行它时,它确实正确地运行,所以我猜它在Cron作业功能中。
我遗漏了什么?是否需要在crontab或服务器上设置设置或参数,以使其正确运行?
发布于 2017-07-24 11:10:18
您可以让PHP进程睡上20秒:
$emails = // retrieve all emails from database
$done = 0;
foreach ($emails as $email) {
// send email to $email
$done++;
if ($done % 40 == 0) { // every 40 emails
sleep(20); // wait 20 seconds
}
}
通常,cron作业是通过php-cli运行服务器端的,默认情况下没有超时。有些主机提供商通过wget或curl实际检索URL来运行cron作业,在这种情况下,您必须考虑可能的超时。在这种情况下,您可以将set_time_limit(0);
添加到脚本中来解决这个问题。
发布于 2017-07-24 09:49:27
我不知道你是怎么处理这个的..。如果将JavaScript添加到文件test.php中,服务器将不会运行test.php,您可以运行以下内容
file_get_contents('https://yourdomain.com/test.php');
这将击中文件,就像在浏览器上运行一样。
或者在PHP语言上重写任务,比如
$url = 'https://yourdomain.com/PT_enrollment.php?sendDate='.$sendDate;
file_get_contents($url);
https://stackoverflow.com/questions/45285424
复制相似问题