如何在虚拟主机上开发PHP定时任务

前面都是解决问题的过程,如果只需要最终解决方案可直接跳到本文最下方。

    前段时间需要做个带有每日积分转换代金券的项目,其核心功能是每日定时将所有用户的积分按比例转换成代金券额。本来不是什么难事,swoole、CronTab等一堆解决方案,但客户用的是非自有服务器(即虚拟主机,由服务器商托管,无远程桌面,无php.ini修改权限,只有FTP),所以只能通过纯PHP代码来实现。

    最开始网上找的方案是用pcntl_alarm()函数,但虚拟主机本身环境不支持pcntl扩展,也没有新的扩展权限,只能继续再找。

    然后找到有用while()+sleep()的方式,具体代码如下:

ignore_user_abort();//关掉浏览器后脚本继续执行
set_time_limit(0);//设置脚本执行时间无上限
ini_set('memory_limit','512M');//内存限制设置
$interval_time = 10;//间隔为10秒
do{
    /*
    *业务逻辑
    */
    sleep($interval_time);//程序暂时睡眠
}while(true);

    初期测试并没有什么问题,但时间一长就有很大概率程序中断,不能持续稳定的执行定时显然不行。

    在参考过一些网上资料与本地调试后,找到一个相较于前一个方法稳定的方式,使用采集函数file_get_contents()代替while()循环,具体代码如下:

ignore_user_abort();//关掉浏览器后脚本继续执行
set_time_limit(0);//设置脚本执行时间无上限
ini_set('memory_limit','512M');//内存限
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值