我正在寻找每1分钟发送一封电子邮件的方法。我查看了以下示例where the top answer is to use PHP sleep()
function。
但是,我也found suggestions that sleep() might slow down the server。
我不是在寻找确切的答案,但一般方法会很棒。
答案 0 :(得分:2)
但是,我也发现
sleep
可能会减慢速度的建议 服务器
是的,点击计算机上播放的电影上的pause
按钮会根据您pause
电影的时间减慢电影的持续时间。
sleep
的目的是暂停脚本。如the official PHP documentation:
将程序执行延迟指定的秒数。
所以是的,它减慢了你的服务器速度。但仅适用于sleep
处于活动状态的内容或网页。
因此,如果这是一个带有sleep
的前端脚本,则会降低任何人通过使用sleep
的PHP脚本查看内容的能力。将它放在HTML正在呈现的页面中间,延迟时间为1秒。您的页面现在需要1秒钟才能渲染。
如果这是一个后端进程,只有你真正知道或触发,没什么大不了的。无论如何,这是一个后台进程,所以它只会在这个领域放慢速度。
那就是说,让我们看看你的核心问题,这是你帖子的第一句话:
我正在寻找每1分钟发送一封电子邮件的方式。
那么你要找的是cron
工作,这是Unix / Linux系统上的一个定时工作。每分钟发送邮件的cron
作业的条目可能是这样的:
* * * * * /full/path/to/php /full/path/to/your/php/script.php
但那是肤浅的。它基本上只是每分钟触发script.php
。然后在你的script.php
内你必须创建一些核心逻辑来控制每次触发时发生的事情。如果您正在使用数据库,那么也许您可以创建一个last_sent
字段,在该字段中您发送了上次将邮件发送给收件人的时间戳,然后您对此进行操作。但同样,逻辑基于您的核心需求。
但是在一天结束时,我不太清楚sleep
将如何影响到这一点。可能值得退后一步,更好地设计您的脚本以满足您的需求,了解cron
是什么,sleep
是什么&他们也不是。
答案 1 :(得分:1)
通常由分离的worker和队列管理器完成。
它是这样的:你有一个发送电子邮件工作者所绑定的队列管理器(即RabbitMQ),
然后,当您需要发送10封电子邮件时,您可以在提供HTTP响应的脚本中一次将所有这些电子邮件放入相应的队列。这一步是立竿见影的。
然后,工作人员逐个阅读电子邮件,并按要求延迟发送电子邮件。这个步骤需要一些时间,但我们不在乎。