【问题标题】:How to automatically call a php script every day to send out automatic emails如何每天自动调用一个php脚本发送自动邮件
【发布时间】:2014-12-02 12:34:29
【问题描述】:

有没有一种方法可以在指定的时间间隔后自动调用 php 脚本。

我有一个 php 脚本(比如提醒用户.php),它使用 mysql 来查询人们提交每周报告的数据库。该脚本自动查询数据库并向尚未发送周报的人发送电子邮件提醒。

我现在要做的是给管理员一个选项来设置提醒开始和提醒结束日期,在此期间应该自动调用我的提醒用户.php 脚本并在提醒结束日期停止。

我从 SO/google 学到的是,我可以设置 cron(在 LINUX 中)自动调用我的提醒用户.php,但我没有任何 shell 访问权限来执行此操作。

否则我是否可以编写另一个 php 脚本以基本上每 24 小时休眠一次并自动唤醒以调用我的提醒用户.php 脚本。

还有其他内置方法吗?

有什么想法吗?

【问题讨论】:

  • 我会联系您的网络主机以了解您是否可以设置 crons。我认为需要 cron 作业是一个非常常见的请求,因此许多主机都会有一些方法来设置它们,即使没有 shell 访问权限。
  • 你有什么主机类型,即使没有外壳,很多主机通过 cpanel 提供 cron 作业
  • 说即使我设置了 cron 访问,它是否可以保存我的 index.php(我的网站)中的数据并每 24 小时使用相同的数据发出查询?
  • 是的,它可以......好吧,cron除了运行脚本什么都不做,它由脚本来完成所有繁重的工作
  • 如果您可以访问另一台已启动并正在运行的计算机上的调度程序(不像您每晚关闭的桌面),您可以创建一个任务来每隔一段时间调用您的提醒用户.php 脚本,检查它是否在过去 24 小时内运行,如果没有运行。我不会使用sleep(),因为我认为这会锁定该脚本的资源。

标签: php mysql crontab cron-task


【解决方案1】:

我了解您没有 Shell 访问权限,但您是否查看过 cPanel 以查看其中是否有设置 cron 作业的选项?

【讨论】:

  • 评论,不是答案
  • 好吧,我不能“评论”,因为我没有足够的声誉来这样做
  • 伙计们,我没有外壳,也没有任何 cpanel。我不需要任何外部应用程序来完成我的工作,因为当我需要下载我不想要的 cpanel 时需要通知 IT。我的代码将发送给客户。您通常不需要客户拥有 cpanel。
  • php 没有内部调度,您必须依赖外部资源,否则您根本无法做到这一点
  • @Dagon 我认为 ramsay smith 的回答是有道理的,但他也需要 cron 来做到这一点。:-(
【解决方案2】:

是的,你可以!您需要做的是使用 cron 作业。 Cron 作业本质上是告诉服务器定期执行脚本(PHP 或其他)。 Cron 作业非常强大且可自定义,因为您几乎可以为您的 cron 设置任何时间间隔。

如果您使用 CPanel 来管理您的站点,CPanel 中有一个按钮可以查看您设置的所有 cron 作业。该页面上还有一个教程。

希望这会有所帮助。

【讨论】:

  • @Dagon 实际上是的。他在问如何建立一个 cron 作业,而我实际上给出了一个关于如何做的答案,而不是仅仅告诉他他应该使用 crons。你的答案在哪里?
  • 如果我问一个琐碎的问题,请原谅我。据我了解,cron 只是以指定的时间间隔调用脚本。我的remindusers.php 需要来自我网页表单的数据。基于该数据,它发出查询。 cron可以保存这些数据并定期传递给我的脚本吗?另外,我必须在管理员需要时自动启动和结束 cron。通常管理员会将这些数据输入到我的网页表单中。
  • @PSN - 您创建了一个接受您正在谈论的表单数据的表;提交后,将其推送到您的表中,然后 cron 任务运行脚本,该脚本从您的表中读取数据并执行它所说的操作。 cron 不专门接受来自任何地方的数据;它只是一种基于某些任务自动运行正在运行的脚本的方法(这就是它在 Windows 中被称为计划任务的原因)。
  • 如果需要,您可以让处理表单输入的脚本将该数据保存到文件中,然后计划的脚本只访问文件中的数据。至于开始和结束,cron 可以检查并仅在当前时间介于 ADMIN 输入的开始日期和结束日期之间时才执行,这将在文件中。如果有意义的话,您也可以将数据存储在 MySQL 中。
  • @RamsaySmith..好主意。让我实现并检查。谢谢大家。
【解决方案3】:

试试这个 PHPCron

PHPCron 是一个简单的 PHP 脚本,可让您按计划或计时器运行多个任务。它可以从命令行或通过 Web 浏览器运行。它的行为与流行的 UNIX cron 程序非常相似。

http://katyscode.wordpress.com/2006/10/17/phpcron-running-scheduled-tasks-from-php-on-a-web-server/

【讨论】:

  • @esbedon 我稍后会查看您的答案并检查是否有效。:-)
【解决方案4】:

使用您网站的访问者触发事件。发送消息,然后检查是否已过 1 天。然后再发一个。还是要注意不要double/triple/...发送deu来同步。

当时间过去后,使用 MySQL(或系统)MUTEX 来确保只发生一次发送。

【讨论】:

  • 没有访客怎么办?
  • @PSN 运气不好。使用系统 cronjob。或者从其他地方触发访问。
猜你喜欢
  • 2012-10-30
  • 2015-04-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2017-03-04
  • 2013-10-31
  • 2013-02-05
  • 2016-08-22
相关资源
最近更新 更多