我有一个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 Job功能中。
我错过了什么?我需要在crontab或服务器上设置一个设置或参数,以便正确运行吗?
答案 0 :(得分:1)
你可以让你的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);
添加到脚本中以解决此问题。
答案 1 :(得分:0)
我不知道你是如何运行的..服务器不会运行JavaScript 如果您将JavaScript添加到文件test.php 你可以运行像
这样的东西file_get_contents('https://yourdomain.com/test.php');
这会像你在浏览器上运行一样点击文件
或重写您的PHP语言任务,如
$url = 'https://yourdomain.com/PT_enrollment.php?sendDate='.$sendDate;
file_get_contents($url);