我可以在网站PHP脚本中进行一小时的睡眠吗?

时间:2012-05-19 15:45:06

标签: php email

我有一个PHP脚本来处理我的电子邮件订阅。

它的确如下:

foreach email to be sent:
    mailer->send-email
    print "Email sent to whoever."

我现在正在通过我的网络托管服务商遇到速率限制。邮件库有一个内置的节流器,可以睡觉,以确保我保持低于速率。但是,这可能导致网页需要多个小时才能实际加载。

客户端浏览器是否会放弃页面加载?有没有建议更好的解决方案呢?

2 个答案:

答案 0 :(得分:4)

为什么要在网页上加载?这应该是一个计划运行的离线后端进程。 (查看cron以了解计划任务。)

任何长时间运行的进程都应委托给后端服务来处理该进程。应用程序界面(例如网页)应尽快响应用户,而不是强迫用户等待(小时?)以获得响应。

应用程序可以通过后端进程的某些共享数据源(例如,简单的数据库)跟踪进度,并将该进度呈现给用户。没关系。但是这个过程本身应该在应用程序之外发生。

例如,处于较高水平......

  1. 安排运行PHP脚本来处理电子邮件。
  2. 当脚本启动时,将记录保存到数据库,指示它已启动。
  3. 每次脚本达到某种里程碑时,请更新数据库记录以表明这一点。
  4. 脚本完成后,更新数据库记录以指示此情况。
  5. 拥有一个检查该数据库记录的Web应用程序,并向用户显示后端进程的当前状态。

答案 1 :(得分:1)

您可能不在乎,但即使您强迫此脚本保持活着,也不应故意通过Web服务器运行长时间运行的脚本。 Web服务器使用资源繁重的线程或进程来运行您的脚本,并且它们可用于服务器Web请求的数量有限。长时间运行的脚本基本上将其中一个脚本从可用于服务器Web访问者的进程池中取出。

相反,使用直接执行php二进制文件的cron作业。具体来说,不要将wgetlynx或任何其他Web浏览器(如程序)用作cron作业的一部分,因为这些方法通过Web服务器运行脚本。 cron命令应该包含类似

的内容

php /full/path/to/the/script.php