如何执行大型PHP脚本?

Ati*_*din 19 php timeout execution

基本上我可能想要执行一个可能需要1个小时的脚本.

我真正想要做的是使用第三方API向我的用户发送短信.所以它基本上就像我为我的脚本提供一系列电话号码并触发发送短信的方法.

假设发送1条短信需要5秒钟,我想发送大约1到2小时的1000条短信.我无法使用,set_time_limit()因为我在共享主机上.

一种方法是在会话中存储号码并执行每个SMS并使用javascript刷新该页面直到结束.这样我需要保持浏览器打开,如果我的Internet连接断开连接,执行将停止.

那么,还有更好的方法吗?

希望我清楚地解释我想要什么?我想执行一个大脚本,可能需要几个小时才能执行而不会超时.

Bil*_*win 21

从命令行或shell脚本,cron作业等执行的PHP脚本没有超时.

对于CLI调用的脚本,即使您使用该set_time_limit()函数动态设置PHP脚本的超时,它也不起作用.


You*_*nse 5

从命令行运行的PHP脚本不受max_execution_time选项的影响.
所以你根本不必担心.


Mat*_*hew 5

如果您的主机允许您,cron作业是最佳解决方案.一个cron作业基本上是一个普通的PHP脚本,它由Web服务器以特定的时间间隔自动运行.根据您的需要,我会创建一个每5分钟运行一次的脚本,并以100个批量处理您的数字(显然,您需要调整时间间隔和批量大小以适应).这将使您的服务器负载下降,并防止您与托管服务提供商遇到麻烦,以占用资源.

为了跟踪脚本应该处理的批处理,我将设置一个track_batch表.这些列应该为您提供如何解决问题的良好指示:

id,date_run,start_record,end_record,final_run

实质上:

  • 检查以查看上次批次运行的日期.如果它不是当前批次的当前日期(或您选择使用的任何其他标识符),则继续.
  • 如果最后一批运行针对当前日期,则检查final_run列以查看您是否已完成处理所有数字.
  • 如果仍有数字需要处理,请将开始和结束记录与MySQL的LIMIT结合使用,以构建脚本将用于获取下一批的db查询.
  • 处理你的号码.
  • 将此批次中的所有信息存储在track_batch表中.
  • 如果查询返回的数字量小于最大批量大小,则您已到达结尾并可将final_run列设置为1.

获得脚本后,您需要自己设置cron作业.共享主机可能有自己的自定义界面来执行此操作,因此一旦您的脚本正常工作,它们可能是最好的人.