php定期拉取数据对比方法实例


Posted in PHP onSeptember 22, 2019

写在前面

今天在网上看帖子提问的时候,看到有人发表了一个提问

php下载远程的批量文件,每天一次,对比昨天和今天的文件,将旧文件替换成新文件

我们通过这个问题来分析讲解一下其中的知识点。

首先要解决的问题是:如何让程序每天自动执行一次脚本

php定时执行任务

关于定时执行,最常见的方法是利用系统级别自带的功能

  • linux ( crontab 定时任务命令) windows计划任务

这需要手动修改系统的任务文件,然后使其生效

手动在linux添加定时任务

# crontab -e

运行该命令 打开任务编辑 在其中输入任务内容,然后Esc :wq保存退出

任务示例

0 0 * * * /www/siam/test.sh

前面的是运行周期的配置,后面的是sh脚本的路径,该方式一般需要自己编写sh脚本来执行

宝塔面板快速计划任务

如果我们使用宝塔面板当成运维工具,那么我们就可以很方便地添加计划任务了,如下图,宝塔中内置了挺多计划任务的类型,如定时请求URL,运行脚本,备份文件等等。

可视化配置,带给我们极大的便利,维护、添加都节约了很多的时间。

这也是为什么宝塔受到那么多人喜爱的原因之一吧。

宝塔面板计划任务的面板添加
取巧云监控定时执行
以上两种方式都需要服务器的权限,我们才可以管理定时任务,假设我们刚入门时使用的是虚拟主机,没有权限设置脚本运行,那么该如何实现这种功能呢?

这里记录了我以前学习时利用的一个小方案,大家可以在其中学习一下。

云监控,是很多云服务商提供的一项服务,它可以用来测试、分析接口或者网站的稳定性和执行效率。

我们可以在服务商的后台类似宝塔面板一样去添加任务,然后服务商就会按我们设置的频率,定期访问网址,获取网址的正确执行、时间等信息,记录到他们后台,提供给用户查看分析改进。

我们可以利用这种特性,由服务商向我们的服务发起请求,我们可以填写一个php脚本的url,在其中判断当前时间,如果当前时间周期已经到了你设置的时间,则执行下面的内容

同时因为云监控是不间断地发起(一般最细颗粒是30s) 如果不能重复运行的任务,我们需要及时地把任务标记为已经执行。

可以在本地写文件,当文件锁。

不同云监控服务商有不同的设置和服务提供,网上有挺多免费的。大家可以找一找,如果找不到好的,也可以联系我QQ交流一下。

现代化PHP

PHP发展了这么久,其实已经有了很大的改进,比如PHP5OOP特性的完善、PHP7的性能提高、Swoole生态的出现,让PHP能做的事越来越多,越做越好。

在当今环境中,我们可以使用SWOOLE常驻内存的特性完成很多事,

这里推荐一下EasySwoole这款基于Swoole环境的框架。

关于定时任务在EasySwoole框架中的文档地址点这里EasySwoole Crontab 定时器

常驻内存的程序,在服务器上后台稳定运行,

EasySwoole中提供了丰富的组件,比如传统PHPFPM环境很难解决的Mysql数据库连接池、协程Redis客户端、协程Http客户端、芒果DB客户端等等

还有我们这个主题有的一个定时任务的模块,下面看一小段demo代码

首先在主环境事件代码中开启定时任务

public static function mainServerCreate(EventRegister $register)
{
  // 开始一个定时任务计划
  Crontab::getInstance()->addTask(TaskOne::class);
}

定时任务的配置和内容

namespace App\Crontab;

use EasySwoole\EasySwoole\Crontab\AbstractCronTask;

class TaskOne extends AbstractCronTask
{

  public static function getRule(): string
  {
    // TODO: Implement getRule() method.
    // 定时周期 (每小时)
    return '@hourly';
  }

  public static function getTaskName(): string
  {
    // TODO: Implement getTaskName() method.
    // 定时任务名称
    return 'taskOne';
  }

  static function run(\swoole_server $server, int $taskId, int $fromWorkerId,$flags=null)
  {
    // 定时任务处理逻辑

    // 我们在这里执行拉取文件、对比处理、保存文件的逻辑就好了
    var_dump('run once per hour');
  }
}

其他问题

解决了定时执行的问题,那么下载文件和保存文件,我觉得应该都不会是很大的问题

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
IP138 IP地址查询小偷实现代码
Feb 15 PHP
PHP中读写文件实现代码
Oct 20 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
PHP实现简单注册登录系统
Dec 28 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 #PHP
php设计模式之单例模式用法经典示例分析
Sep 20 #PHP
php数组和链表的区别总结
Sep 20 #PHP
php输出反斜杠的实例方法
Sep 19 #PHP
php实现session共享的实例方法
Sep 19 #PHP
php进行md5加密简单实例方法
Sep 19 #PHP
php解决安全问题的方法实例
Sep 19 #PHP
You might like
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
python使用zip将list转为json的方法
2018/12/31 Python
python redis 删除key脚本的实例
2019/02/19 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
会计工作总结范文2014
2014/12/23 职场文书
倡议书范文大全
2015/04/28 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
信息技术国培研修日志
2015/11/13 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
Python 数据可视化之Matplotlib详解
2021/11/02 Python