0

我有一个我编写的 php 文件,用于检查某些文件夹中的新文件,然后通过电子邮件发送自上次运行以来的最新文件。有时这可能是 10-15 个文件附加到电子邮件。我正在使用 swiftmailer 发送电子邮件。

该脚本最多可以循环访问 50 个客户,每个客户都可以拥有需要通过电子邮件发送的文件。通常,这会通过 PHP 超时并引发错误。我一直在尝试通过 php 将客户编号写入文件来跟踪它停止的位置。

如何使用 PHP 说“如果出现突然退出或错误,则重新运行此文件”。

另一种说法是......当我收到超时错误或任何其他错误时,我可以简单地重新加载另一个 PHP 文件以从我离开的地方继续吗?

这似乎不是完成我的任务的最干净的方式,所以我愿意接受建议。

4

1 回答 1

3

您可以通过写入平面文件或数据库来跟踪要处理的文件,并在完成时删除每个文件的条目。当脚本重新启动时,阅读要处理的文件列表并从您离开的地方继续。

此外,如果您知道脚本经常需要更多时间,请考虑增加 php.ini 中的超时设置。

如果您需要不断地重新启动脚本直到处理完成,请考虑以下场景:

  • 每五分钟(或适当的时间间隔)通过 cron 启动脚本
  • 该脚本写入一个 PID 文件
    • 如果脚本发现PID文件已经存在,那么前面的脚本就崩溃了,所以重新开始处理日志。
  • 检查数据库上一次成功运行的时间。
    • 如果上次成功运行时间小于最小值(您当前运行脚本的时间间隔),请删除 PID 并退出。
    • 如果上次成功运行时间超过最小值,则处理文件,删除 PID,然后退出。

PID 文件的使用不是绝对必要的;您可以通过检查日志是否存在并有条目来获得相同的信息。然而,PID 的使用是传统的,它提供了一种快速且廉价的方法来确定前一个过程是否成功完成。

于 2013-05-08T19:46:26.827 回答